| Autor |
Beitrag |
bEaST
Hält's aus hier
Beiträge: 7
|
Verfasst: Mo 20.09.04 13:05
Hallo miteinander,
ich bin gerade dabei einen kleinen Texteditor mit Syntaxhervorhebung zu programmieren.
Ich verwende als "Editor" eine TRichEdit Komponente, nun habe ich folgendes Problem...
In meinem OnChance() Ereignis überprüfe ich jedes eingegebene Wort auf ein typisches Schlüsselwort, fals es eines davon ist, markiere ich es mit SelStart(x) und SelLength(x).
Nun weise ich mit der SelAttributes Prozedur dem markierten Text eine andere Farbe zu (ist ja ein Schlüsselwort). Das eigentliche Problem dabei ist nur, dass beim schreiben im RichEdit Control wahrscheinlich immer durch SelAttribute und SelStart etc. die Refresh Methode aufgerufen wird. Die Folge darauf ist, dass die RichEdit Komponente ständig "flackert" (mit einem harmlosen Bildzusammenbruch zu vergleichen). Ich habe nun schon versucht mit SendMessage und der entsprechenden Nachricht die Refresh Methode zu unterdrücken, aber ohne Erfolg...
Könnte mir vielleicht jemand einen Tipp geben wie ich einen ähnlichen Editor wie in der Delphi IDE (oder wegen mir auch wie in UltraEdit) bekomme, der Syntaxhervorhebung unterstützt, aber ohne dieses lästige flackern.
Danke!
|
|
maxk
      
Beiträge: 1696
Erhaltene Danke: 1
Win XP, Debian Lenny
Delphi 6 Personal
|
Verfasst: Mo 20.09.04 13:08
Hi und  im Delphi-Forum,
setze mal RichEdit1.DoubleBuffered auf True. Außerdem würde ich empfehlen, die Überprüfung auf Schlüsselworte nicht in OnChange sondern in OnKeyPress zu machen. Dann musst du den Vergleich nur bei Leerzeichen starten.
_________________ Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
|
|
bEaST 
Hält's aus hier
Beiträge: 7
|
Verfasst: Mo 20.09.04 13:15
| maxk hat folgendes geschrieben: | Hi und im Delphi-Forum,
setze mal RichEdit1.DoubleBuffered auf True. Außerdem würde ich empfehlen, die Überprüfung auf Schlüsselworte nicht in OnChange sondern in OnKeyPress zu machen. Dann musst du den Vergleich nur bei Leerzeichen starten. |
Wow, schnelle Hilfe ist hier wohl üblich  . Danke, werde ich mal probieren, obwohl ich sowas glaube ich bei meiner Delphi-Version noch nicht gesehen habe (Delphi 3 Pro).
Bis dann...
|
|
maxk
      
Beiträge: 1696
Erhaltene Danke: 1
Win XP, Debian Lenny
Delphi 6 Personal
|
Verfasst: Mo 20.09.04 13:23
| bEaST hat folgendes geschrieben: | Wow, schnelle Hilfe ist hier wohl üblich . |
Ähm, ja die Frage nach DoubleBuffered kommt relativ oft ( DOUBLEBUFFERED), da weiss man schon, die Antwort, bevor die Frage gestellt wurde
| bEaST hat folgendes geschrieben: | | Danke, werde ich mal probieren, obwohl ich sowas glaube ich bei meiner Delphi-Version noch nicht gesehen habe (Delphi 3 Pro). |
Kann ich mir eigentlich nicht verstellen 
_________________ Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
|
|
.Chef
      
Beiträge: 1112
|
Verfasst: Mo 20.09.04 13:26
Luckie, wenn du das liest: Deshalb 2. in der Sig.
SCNR,
Jörg
_________________ Die Antworten auf die 5 häufigsten Fragen:
1. Copy(), Pos(), Length() --- 2. DoubleBuffered:=True; --- 3. Application.ProcessMessages bzw. TThread --- 4. ShellExecute() --- 5. Keine Vergleiche von Real-Typen mit "="!
|
|
maxk
      
Beiträge: 1696
Erhaltene Danke: 1
Win XP, Debian Lenny
Delphi 6 Personal
|
Verfasst: Mo 20.09.04 13:42
Hihi, daran habe ich auch denken müssen. Dummerweise wusste ich nichtmehr den Username, der zu der Signatur passt 
_________________ Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
|
|
bEaST 
Hält's aus hier
Beiträge: 7
|
Verfasst: Mo 20.09.04 14:35
Tja, wie ich dachte... In Delphi 3 gibt es so was "neumodisches" nocht nicht! Ich habe
zum Test mal meine Delphi 7 Demo ausgegraben und siehe da...
Naja, hätte vielleicht jemand nen Vorschlag wie man so was auch mit API´s lösen könnte (schau mir jetzt mal die restlichen Suchergebnisse an)?
|
|