Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Painting in the code editor (https://www.delphipraxis.net/204485-painting-code-editor.html)

stahli 31. Mai 2020 22:51

Painting in the code editor
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich möchte bestimmte Texte im Codeeditor farbig hinterlegen.

Ein früherer Ansatz über IOTAHighlighter (https://www.delphipraxis.net/204355-...hlighting.html) schägt offenbar fehl (ist auch so im Netz als Problem zu finden).


Einen anderen Ansatz beschreibt David von Parnassus (woher auch die neuen Bookmarks stammen).

-> https://parnassus.co/mysteries-of-id...editor-part-1/

Ich habe das soweit nachgebaut und versucht, das Beispiel aus dem Screenshot zu erreichen.
Es wird als Basisfall einfach "Hello Word" links oben in den Editor gemalt.

Wenn das funktioniert, lässt sich das weiter ausbauen, was auch in einem zweiten Teil näher beschrieben wird.

-> https://parnassus.co/mysteries-ide-p...editor-part-2/


Aber ich komme mit Part 1 noch nicht ganz zurecht.
Ich habe bereits alles umsetzen können bis auf EINEN Punkt:
Delphi-Quellcode:
 FOriginalPaintLine := TCodeRedirect.GetActualAddr(GetProcAddress(FCoreIDEHandle, '@Editorcontrol@TCustomEditControl@PaintLine$qqrr16Ek@TPaintContextiii'));
 // Patch the code editor’s PaintLine to use our method
 FPaintLineHook := TCodeRedirect.Create(@FOriginalPaintLine, @HookedIDEPaintLine);
Zitat:

Note: FCoreIDEHandle is the module handle of coreide*.bpl, loaded into the current process. Finding this is left as an exercise for the reader, and there are variety of ways. This method may get you started.
-> https://stackoverflow.com/questions/...unction-within

Delphi-Quellcode:
FCoreIDEHandle
ist nicht bekannt. In den Hinweisen ist das bereits erläutert und man muss irgendwie die IDECore.dll laden und dort zur Laufzeit suchen.
Ob der Controlname noch stimmt, weiß ich auch nicht.
Ich hätte aber auf jeden Fall Interesse, den Weg noch weiter zu versuchen (ist schwierig als Autodidakt).

Kann hier jemand helfen??? Oder hat jemand Grundkenntnisse bei der Verwendung einer DLL und Interesse an dem Thema?

Wir könnten die unfertigen Units entsprechend teilen und weiter entwickeln...

Uwe Raabe 31. Mai 2020 22:58

AW: Painting in the code editor
 
Zitat:

Zitat von stahli (Beitrag 1466013)
Ich möchte bestimmte Texte im Codeeditor farbig hinterlegen.

Du könntest dir mal meine Session der CodeRage 2019 dazu ansehen: Decorating the Editor View

stahli 31. Mai 2020 23:19

AW: Painting in the code editor
 
Oh, das sieht ja genial aus!

Ich versuche mal, mich damit zu beschäftigen...

Vielen Dank!

stahli 1. Jun 2020 21:24

AW: Painting in the code editor
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Uwe,

vielen Dank!!!
Wie kommt man auf solche Lösungen??? Du bist ja echt genial.

Ich habe schon mal einen ersten Zwischenstand erreicht, der die richtige Richtung aufzeigt: https://youtu.be/GpYPVsxopNI

Ich muss da noch einiges klären und ausbauen, aber mit dem ersten Zwischenstand bin ich schon mal mehr als zufrieden.
Hätte gar nicht mehr gedacht, dass ich doch noch eine Lösung finde.

Also danke nochmal! :kiss:

bernau 2. Jun 2020 10:03

AW: Painting in the code editor
 
Das sieht sehr interessant aus. :thumb:

stahli 12. Aug 2020 21:16

AW: Painting in the code editor
 
Liste der Anhänge anzeigen (Anzahl: 1)
mein aktueller Stand (kurzes Video): https://youtu.be/b_n7glxa-nw

(Ist noch nicht ganz fertig und wird Teil meines UnitOptimizers.)

stahli 28. Aug 2020 19:41

AW: Painting in the code editor
 
Nach längerer Unterbrechung wegen anderer Verpflichtungen möchte ich hier an der Stelle weiter machen...

Mein aktuelles Problem: Ich möchte zu bestimmten Zeitpunkten eine Neuzeichnung des (oder der) aktuellen Editorfenster veranlassen.
Das Zeichnen funktioniert, aber ich brauche manchmal eine komplette Aktualisierung.

In den OTA und im Netz finde ich dazu nichts.

Hat jemand einen Tipp?

venice2 28. Aug 2020 19:45

AW: Painting in the code editor
 
Zitat:

Zitat von stahli (Beitrag 1472571)
Nach längerer Unterbrechung wegen anderer Verpflichtungen möchte ich hier an der Stelle weiter machen...

Mein aktuelles Problem: Ich möchte zu bestimmten Zeitpunkten eine Neuzeichnung des (oder der) aktuellen Editorfenster veranlassen.
Das Zeichnen funktioniert, aber ich brauche manchmal eine komplette Aktualisierung.

In den OTA und im Netz finde ich dazu nichts.

Hat jemand einen Tipp?

Editor Fenster Handle und Invalidate geht nicht?
Sollte mich wundern.

Wenn alle Editor Fenster dann halt das Handle der IDE komplett.
Wenn du dich innerhalb des Fensters befindest bekommst du das Handle am schnellsten über ChildWindowFromPoint, WindowFromPoint
FindWindow und oder Enumerieren kannst dir dann sparen.

stahli 28. Aug 2020 21:04

AW: Painting in the code editor
 
Liste der Anhänge anzeigen (Anzahl: 1)
Oh, peinlich, das war gar nicht das Hauptproblem. :oops:

Wenn ich im Editor arbeite wird (natürlich) alles neu gezeichnet - auch beim rückwärts löschen.

Aber nicht beim Löschen über die ENTF-Taste (anbei ein kurzes Video).

Gibt es eine einfache Möglichkeit, darauf zu reagieren, ohne noch einen zusätzlichen Module-Notifier einzurichten und es dann über ein Form-Invalidate zu versuchen?

stahli 29. Aug 2020 15:28

AW: Painting in the code editor
 
Ich prüfe jetzt einfach zyklisch den Text unter dem Cursor (weniger oft als die Cursorposition, damit die Last nicht so ansteigt).
So passt das jetzt schon sehr gut und kann auf kompliziertere Prüfungen und Überwachungen verzichten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:50 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz