Moin,
ich versuche einen Editor mit Syntax Highlighting für eine Skriptsprache zu
entwickeln.
Während ein User das Skript schreibt sollen vom Programm erkannte
Schlüsselwörter in einer anderen Farbe dargestellt werden.
Da ich noch recht unerfahren in der Programmierung bin, habe ich es
ersteinmal so versucht.
Ich erstellte ein EditFieldPlus und habe dem Window noch 2 Properties (Ende
As Integer und NeuStart As Boolean) hinzugefügt.
Desweiteren gibt es eine ListBox in der ich jedes einzelne Wort des
geschriebenen Textes sichere...
Und ich habe ein Dictionary (AHK_CMD) in dem die Schlüsselwörter und deren
Parameter stehen.
Im KeyDown Event des EditField habe ich folgenden Code:
Dim Wort As String 'Hier sichere ich das erkannte Schlüsselwort
If Len(Me.Text) = 0 Then
NeuStart = True 'NeuStart ist eine Property des Window
End
If NeuStart Then
Start = Me.SelStart 'Hier startet ein neues Wort
NeuStart = False
End
If Key = " " OR Key = "," OR Key = Chr(13) Then
NeuStart = True 'Das nächste Wort wird wieder ein neues sein
Ende=Me.SelStart+1 'Hier endet das aktuelle Wort
Wort = Mid(Me.Text,Start, Ende-Start) 'Wir kopieren das Wort aus dem
Skript
Wort = App.Wort_bereinigen(Wort) 'Und bereinigen es mittels einer
Methode von Leerzeichen, Kommata, usw
Start = Ende-Len(Wort)
If Wort<>"" Then 'Nun fügen wir das Wort in die Listbox ein
ListBox1.AddRow Wort
ListBox1.Cell(ListBox1.LastIndex,1)=Str(Start-1)
ListBox1.Cell(ListBox1.LastIndex,2)=Str(Ende)
End
End
If AHK_CMD.HasKey(ListBox1.Cell(ListBox1.LastIndex,0)) Then 'Wenn das
letzte Wort im Dictionary vorhanden ist,
ListBox1.CellBold(ListBox1.LastIndex,0)=True 'dann schreiben wir es Fett
innerhalb der Listbox
EditField_Hilfe_1.Text=AHK_CMD.Value(ListBox1.Cell(ListBox1.LastIndex,0))
'In einem anderen EditField schreiben wir die Parameter zum erkannten
Schlüsselwort
End
EditField_Counter.Text = Str(Me.SelStart)
Im TextChange Event steht folgender Code:
Dim Schleife As Integer
'Der Folgende Code markiert, in der ListBox fett geschriebene Worte, im Text
For Schleife=1 to ListBox1.LastIndex
If ListBox1.CellBold(Schleife,0) Then
Me.StyledText.TextColor(Val(ListBox1.Cell(Schleife,1)),Val(ListBox1.Cell(Sch
leife,2))-Val(ListBox1.Cell(Schleife,1))) = &c0000FF
Me.StyledText.TextColor(Val(ListBox1.Cell(Schleife,2)),0) = &c000000
End
Next
Wir Ihr Euch sicher vorstellen könnt, funktioniert das nicht besonders gut.
Die Schlüsselwörter werden zwar erkannt und im Text auch gekennzeichnet,
aber das alles funktioniert nur solange ich das Skript einfach nur schreibe.
Sobald ich anfange den Text zu verändern, schlägt meine Methode fehl.
Hat jemand schon einmal etwas ähnliches versucht oder gibt es "raffinierte"
Routinen die mir hier helfen könnten?
Wenn ich mit meiner Variante Text einlade oder in das EditField kopiere,
kann es so ja auch nicht funktionieren.
Ich habe schon so viel versucht, komme aber irgendwie nicht wirklich vorran.
Vielen Dank für jede Hilfe.
Gruss Schneppi
|