MFC CRichEditCtrl

Christian Fein

Erfahrenes Mitglied
Ich versuche grad sowas wie syntax highlightning in einen RichEdit Editor den ich zum ueben bastle zu integrieren.
Ich habe jetzt mit muehe und noch eine methode um den gewuenschten Text zu finden und zu formatieren in die gewuenschte Farbe.
Jedoch das broblem ist :
Ich weis nur wie ich eine Selection formatieren kann und er findet auch nur eine !! Selection im Text.
Ebenso springt der Cursor nicht wieder ans Textende zurueck :(
Naja so sieht meine Methode aus:

Code:
 char* lpszmyString = "blub";
// _findtextexa *ft = new _findtextexa;
	 FINDTEXTEXA ft;
     ft.chrg.cpMin = 0;
     ft.chrg.cpMax = -1;
     ft.lpstrText = (LPSTR)lpszmyString;
     long n = GetRichEditCtrl().FindText(FR_MATCHCASE|FR_WHOLEWORD, &ft);
     if (n != -1)
	 GetRichEditCtrl().SetSel(ft.chrgText);

jemand nie idee wie ich text nachtraeglich formatieren ohne ihn zu makieren kann ?
 

Thomas Kuse

Erfahrenes Mitglied
uhh hab mir da vor 2 jahren schon mal gedanken drüber gemacht als der erste homesite aufm markt war und das highlighting ein highlight war ;-)

naja ich habs damals in delphi probiert (eigentlich egal welche programmiersprache, is eh alles ähnlich).

es gibt da so'ne funktion, die heisst show-selection oder ähnlich, so daß DEINE selection nicht angezeigt wird.

du kannst dann also in ruhe (naja nich wirklich) deinen code durchparsen, markieren und färben. aber auch würde ich nicht nach ganzen wörtern suchen.

wieder du wieder hoch kommst is eigentlich ganz simpel.
du packst den selection-anfang auf 0 und die länge auch, schon dürfte er wieder oben sein!
 

Thomas Kuse

Erfahrenes Mitglied
wenn du doch noch ne andre methode findest, dann lass es mich bitte wissen! das is ein interessantes thema!

wenn man mal bei homesite o.ä. geschaut hat, dann sieht es nicht so aus als ob sie das nach dem schemata machen!
 

Christian Fein

Erfahrenes Mitglied
GetRichEditCtrl().HideSelection(TRUE,FALSE);

ist das was du glaube ich meinst aber das hilft leider nicht es versteckt allerhoechstens die selction :p
 

Thomas Kuse

Erfahrenes Mitglied
naja ich glaube ich habe dann wohl nicht ganz verstanden, auf was du hinaus wolltest!

was den fehler angeht, dass du nur einen eintrag findest, das dürfte
Code:
long n = GetRichEditCtrl().FindText(FR_MATCHCASE|FR_WHOLEWORD, &ft);
sein, denn du suchst nur nach dem text, immer wieder, aber machst kein findnext! ich denke mal das wird es sein.

der code sieht aber trotzdem eigenartig aus, bin ein borland c++ programmierer, dort sieht das sehr anders aus!
 

Xeragon

Erfahrenes Mitglied
Hmm, ich hab zwar schon lange nicht mehr MFC programmiert, aber ich denke mal der Ansatz den du hast (Auswahl verstekcken, formatieren, zurück zur aktuellen Position, anzeigen) ist der einfachste. Der Schönere ist natürlich Subclassing d.h. du leitest dir von CRichEditCtrl eine Klasse ab und überschreibst Funktionen, damit sie Syntax-Highlighting unterstützen.
 

Christian Fein

Erfahrenes Mitglied
Hab ne moeglichkeit gefunden.
Wenn ich findtext durchfuehre kann ich den endpunkt des gefundenen wortes als CHARRANGE Punkt speichern und diesen Endpunkt als anfangspunkt der erneuten Suche anlegen. Lasse das mit ner Rekursion so lange laufen bis der startpunk -1 ist.
Auf diese Weise klappt arbeite ich sobald die Taste Del benutzt wurde.
Ich habe es bisher mit ner anderen art und weise gemacht. ich habe [leer] Taste 1 als CHARRANGE Punkt gespeichert und die Taste 2 und habe dann anhand der Punkte die formation durchgefuehrt.
Das macht aber probleme bei edition des schon geschriebenen Textes. Drum werd ich die Del und Backspace taste mit der Rekursion verbinden.
Hoffe das klappt und ich lass meinen PC nicht unnoetige Rundendrehen
:)