Textarea farbliche selektierung.

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

Mathias-Kwiatkowski

Betreff: Textarea farbliche selektierung.

BeitragSo, Okt 29, 2017 22:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich möchte gern ein editor schreiben, einfach nur so aus langeweile und interesse, es soll das wort Print dick und eben rot gemalt werden, dies funktioniert wunderbar. problem an der sache ist wenn man nun zwischen dem wort Print par buchstaben dazwischen setzt werden sie ebenfalls rot, kla macht sinn es wird bei einer wort trennung nicht die farbe verändert.

so nun zu meiner frage wie kann man es am sinvollsten gestallten, bei einer veränderung des wortes die farbe zurück zu setzen in schwarz.

problem ist PrSFDFint muss ja das Pr schwarz gemacht werden das eigentliche und das danach.

was ich nich möchte ist mit einer schleife immer wieder durch den gesamten text zu gehen um zu schauen wo Print steht.


oder gibts da eine ganz besondere vorgehensweise?

Code: [AUSKLAPPEN]
SuperStrict
Import maxgui.drivers

Type TMain
   Global Window:Tgadget
   Global Textarea:Tgadget
   
   Function Create()
      Window = CreateWindow("Editor", 0, 0, 640, 480, Desktop(), WINDOW_TITLEBAR | WINDOW_RESIZABLE | WINDOW_STATUS | WINDOW_CENTER | WINDOW_ACCEPTFILES)
      Textarea = CreateTextArea(0, 0, ClientWidth(Window), ClientHeight(Window) , Window)
      SetGadgetLayout(Textarea, 1, 1, 1, 1)
      
   End Function
   
   Function Do()
      Create()
      
      Local Befehl:String = "Print"
      
      CreateTimer 60
      Repeat
         
         WaitEvent()
         
         Local Pos:Int = TextAreaCursor(Textarea)
         
         If Pos > 1 Then
            If TextAreaText(Textarea, Pos - Befehl.Length, Befehl.Length) = "Print" Then
               FormatTextAreaText(Textarea, 255, 0, 0, TEXTFORMAT_BOLD, Pos - 5, 5)
            EndIf
         EndIf
         
         Local TmpGadget:Tgadget
         Select EventID()
            Case EVENT_GADGETACTION
               TmpGadget = TGadget(EventSource())
               
            Case EVENT_TIMERTICK
            
            Case EVENT_GADGETPAINT
            
            Case EVENT_APPTERMINATE, EVENT_WINDOWCLOSE
               End
         End Select
      Forever
   End Function
End Type

TMain.Do()
Skype: Anarchie1984
http://projektworks.de/maxbase/
Icq - Erneuert am 21.08.2017
Yahoo - Erneuert am 21.08.2017

Thunder

BeitragMo, Okt 30, 2017 0:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn der Text im Editor geändert wird (egal wie, durch Tastatur, öffnen einer anderen Datei ...), dann möchtest du das Highlighting erneuern.
Beim Öffnen einer neuen Datei hast du keine Wahl, als einfach das Highlighting auf den ganzen Text anzuwenden.

Wenn du aber genauere Informationen darüber hast, wo sich was geändert hat (Tastendruck, Bearbeiten->Rückgängig, ...), kannst du es zeilenweise aktualisieren. Ich glaube, es weiter herunterzubrechen (wortweise) macht keinen sinn.
Du hast sowieso mit zeilenweiser Aktualisierung schon zusätzliche Sonderfälle abzuhandeln. Beispielsweise:
BlitzMax: [AUSKLAPPEN]
Rem
1. Zeile
2. Zeile
EndRem

Wenn ich jetzt noch eine dritte Zeile vor EndRem einfüge, sollte die gleich gefärbt sein wie der Rest des Kommentars, aber wenn der Algorithmus nur die Zeile ansieht, die ich einfüge, kann er das nicht wissen.

Ich empfehle den Code nicht, aber der Code von MaxIDE ist öffentlich und in BlitzMax geschrieben. Da gibt es eine 211 Zeilen lange Methode, die dafür zuständig ist, Updates zum Syntaxhighlighting zu machen (SetCode). Diese versucht auch, nicht das ganze File zu aktualisieren, soweit ich das sehe, aber sie ist nicht sehr leserlich geschrieben.
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group