2013-10-30 6 views
6

Verwendung: Delphi XE2, Windows-VCL-Formularanwendung, 32-Bit-SynEdit: Wie kann die Hervorhebung mehrerer Textbereiche bei Start- und Stopp-Positionen hervorgehoben werden?

ich die SynEdit Kontrolle bin mit Text angezeigt werden soll. Ich verwende bereits den TSynHTMLSyn-Syntax-Highlighter mit dem Steuerelement, um HTML- und JS-Code richtig hervorzuheben.

Ich mache auch eine Diff auf diesen Text (mit Angus Johnson TDiff) mit einer anderen Version des Textes zu finden: Streichungen, Ergänzungen und Änderungen. Ich muss jede dieser Art von Änderungen mit einer anderen Farbe markieren, dh ROT zum Löschen, BLAU für Zusätze und GRÜN für Änderungen.

Meine Fragen:

  1. Ist es möglich, zu implementieren?
  2. Wenn ja, wie?

TIA.

+0

Ich bin nicht wirklich ein SynEdit Benutzer, aber wenn nichts anderes half, würde ich etwas versuchen wie 'E.SelStart: = x; E.SelEnd: = y; E.SelectedColor: = c; '(Blick auf den Membersatz der Klasse [hier] (http://z505.com/synedit/synedit_doc/tsynedit.html) und [hier] (http://z505.com/synedit/ synedit_doc/tcustomsynedit.html)). –

+0

Das funktioniert, aber ich brauche: 1) Mehrere Auswahlen markiert sein 2) Auch wenn der Benutzer auf das Steuerelement klickt, um einen anderen Text auszuwählen, sollte der Text, der zuvor hervorgehoben wurde, hervorgehoben bleiben. –

+0

Haben Sie die Gabel von 'TSynEdit' überprüft, die von der Lazarus IDE verwendet wird? Ich denke, es kann mehrere hervorgehobene Blöcke behandeln, die beim Bearbeiten bestehen bleiben. –

Antwort

1

Versuchen Sie das Ereignis TSynEdit.onSpecialLineColors zu verwenden, z.

procedure TfmRunScript.EditorSpecialLineColors(Sender: TObject; 
    Line: Integer; var Special: Boolean; var FG, BG: TColor); 
begin 
if Line = ErrorLine then 
    begin 
    Special := True; 
    BG := clMaroon; 
    FG := clWhite; 
    end; 
end; 
+1

Ich muss Wörter in einer Zeile basierend auf Pufferposition markieren (Start und Stopp). Ich sehe nicht, wie dieses Ereignis für mich funktionieren würde. –