Syntax Highlight



  • Hi, ich versuche gerade in meinem pseudo Editor diverse Schlagwörter zu highlighten, also z.B. "if" wird blau gefärbt.
    Das Problem: ich habe (naiverweise) geglaubt, dass es ganz simple mit einem RichEdit Control funktioniert (habe das beim Googlen mal aufgeschnappt, dass es so vermeintlich einfach sei). Habe jetzt einen Parser entwickelt, der auch super funktioniert. Als netten Bonus würde ich jetzt auch gerne die Wörter highlighten.

    Wie könnte ich da am besten rangehen?
    Meine Überlegung war bisher: sobald ein Buchstabe gedrückt wird, wird mein Parser aufgerufen, der die jeweilige Zeile parst. Falls ein Match gefunden wird, wird entsprechend die Position(en) zurückgegeben und ich rufe SendMessage, das eben dieses Match auswählt (also mit dem Cursor), ich färbe es und meine Auswahl (Cursor) springt wieder an die ursprüngliche Stelle zurück. Ich kann mir aber vorstellen, dass das ziemlich umständlich ist, oder? Gibt es eine Möglichkeit, dass es "einfacher" bzw. "schöner" (dieses Zurückspringen ist ja sicher ziemlich speicherintensiv) zu lösen?

    Gegoogelt habe ich schon, bin da immer wieder auf Scintilla gestoßen, das scheint ganz gut zu sein und würde auch genau das machen, was ich will, aber daraus wurde ich leider nicht so schlau..

    Mfg



  • Ja es ist ziemlich umständlich. Aber es funktioniert meiner Erfahrung nach, einen besseren Weg kenn ich leider nicht. Die Alternative ist wohl, ein anderes Control zu verwenden oder selbst eines zu basteln...



  • Mist, das habe ich befürchtet. Weißt du zufällig, wenn du sagst, dass du da Erfahrungen hast, wie das mit dem Speicher aussieht, flackert es dann? Wie gesagt, es soll nur ein Bonus sein, wenn danach mein Editfeld nach jedem Tastendruck kurz flackert, ist das ziemlich nervig...



  • Naja, ich stoße auf Codeproject immer wieder auf Versuche, das zu machen, z.B. hier:

    http://www.codeproject.com/Articles/13581/Fast-HTML-syntax-highlighting-with-the-Rich-Edit-c

    Finde ich aber nicht unbedingt ratsam. Wäre besser, ein Control wie Scintilla zu nehmen. Was genau verstehst du daran nicht? Gibt aber auch zig andere Controls, die Syntax highlighting machen. Hab ich sogar selber schon geschrieben, vor zig Jahren in Delphi.



  • Naja, ich hab mir das mal angeguckt, aber das ist mir fast etwas zu umfangreich.. ist zwar klasse alles, aber als dann mal so ein Scintilla Edit gebaut habe, hatte ich erstmal nen Bug mit dem Autoscroll.. dann habe ich das wieder runter getan, weil ich brauch ja wirklich nur eine Funktion, die mir das farbig macht. Scintilla bietet mir da viel zu viel, habe da gar keinen Überblick... es ist ja (leider) nicht so, dass ich nur ein Control aufrufe und dann 1-2 Funktionen entsprechend aufrufe, denn scheinbar muss ich noch deutlich mehr machen (z.B. bei diesem Autoscrollbug)




  • Mod

    Ist allerdings kostenpflichtig aber sehr einfach zu kontrollieren:
    http://www.bcgsoft.com/bcgedit.htm


Log in to reply