ist es irgendwie möglich im Editor Gadget Syntax Highlighting einzubauen? Wenn ja, wie?

Gruss
PMTheQuick

Code: Alles auswählen
Protected hFont.l = GetStockObject_(#DEFAULT_GUI_FONT)
Code: Alles auswählen
; PB V4.0keine_ahnung
Prototype PrevProc(hwnd,uMsg,wParam,lParam)
Define PrevEditProc.PrevProc = 0
Define hwnd
Define hEdit
Define i
Define event
Macro DrawWord(word,color)
If Not CompareMemoryString(*ptr_char,@word,1,Len(word)) ; wort vergleichen
SetTextColor_(hdc,color) ; farbe setzen
SendMessage_(hwnd,#EM_POSFROMCHAR,@rect,first_index+*ptr_char-@Buffer) ; aktuelle Position des Chars holen
DrawText_(hdc,*ptr_char,Len(word),rect,0) ; und strng ueber den alten malen
EndIf
EndMacro
Procedure EditCallback(hwnd,uMsg,wParam,lParam)
Shared PrevEditProc.PrevProc
Protected Buffer.s
Protected first_index.l
Protected last_index.l
Protected rect.RECT
Protected TextRange.TEXTRANGE
Protected *ptr_char.Character
Protected hdc.l , hreg.l
Protected hFont.l = GetStockObject_(#DEFAULT_GUI_FONT)
Protected result
; WM_PAINT abfangen
If uMsg = #WM_PAINT
; allten Calback aufrufen um alles zu zeichnen
result = PrevEditProc(hwnd,uMsg,wParam,lParam)
SendMessage_(hwnd,#EM_GETRECT,0,@rect)
; Charakter index des ersten und letzten Zeichens auslesen.
first_index = SendMessage_(hwnd,#EM_CHARFROMPOS,0,rect)
last_index = SendMessage_(hwnd,#EM_CHARFROMPOS,0,@rect\right)
If (last_index-first_index) > 0 ; mehr als 0 Zeichen
Buffer = Space(last_index-first_index) ; PB String genug speicher geben
TextRange\chrg\cpMin = first_index
TextRange\chrg\cpMax = last_index
TextRange\lpstrText = @Buffer
SendMessage_(hwnd,#EM_GETTEXTRANGE,0,TextRange) ; Text in buffer schreiben lassen
hdc = GetDC_(hwnd)
hreg = CreateRectRgn_(rect\left,rect\top,rect\right,rect\bottom) ; eine Region erstellen
SelectObject_(hdc,hreg) ; Region zuweisen
SetBkMode_(hdc,#TRANSPARENT) ; hintergrund auf transparent setzen
SelectObject_(hdc,hFont) ; !Wichtig , Font setzen
; Es muss der gleiche Font sein, inc. Eigenschaften
; er darf weder breiter noch groesser sein, als der normale Font.
*ptr_char = @Buffer
While *ptr_char\c
DrawWord("hallo",$0000FF) ; Achtung Macro !
DrawWord("du",$FF0000) ; Achtung Macro !
DrawWord("da",$008000) ; Achtung Macro !
*ptr_char + 1
Wend
DeleteObject_(hreg) ; region wieder loeschen
ReleaseDC_(hwnd,hdc)
EndIf
; und raus hier
ProcedureReturn result
EndIf
; sonstige Nachrichten an den alten Callback weiterleiten
ProcedureReturn PrevEditProc(hwnd,uMsg,wParam,lParam)
EndProcedure
hwnd = OpenWindow(0,0,0,500,500,"TEST")
CreateGadgetList(hwnd)
hEdit = EditorGadget(0,0,0,500,500)
PrevEditProc = SetWindowLong_(hEdit,#GWL_WNDPROC,@EditCallback())
For i = 0 To 100
AddGadgetItem(0,i,"HalLo du da")
Next
Repeat
event = WaitWindowEvent()
Until event = 16