realbasic-nug.de
[Top] [All Lists]

Autoformat eines EditField?

To: "REALbasic NUG.De" <realbasic-nug dot de at lists dot realsoftware dot com>
Subject: Autoformat eines EditField?
From: "Schneppmueller, Sascha" <Sascha dot Schneppmueller at whv dot de dot sykes dot com>
Date: Wed, 19 Jan 2005 14:51:20 +0100
Delivered-to: realbasic-nug dot de at lists dot realsoftware dot com
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

<Prev in Thread] Current Thread [Next in Thread>