Syntax Highlighting im EditorGadget???
-
- Beiträge: 630
- Registriert: 05.05.2005 19:06
Syntax Highlighting im EditorGadget???
Hi,
ist es irgendwie möglich im Editor Gadget Syntax Highlighting einzubauen? Wenn ja, wie? Habe PB 4.02...
Gruss
PMTheQuick
ist es irgendwie möglich im Editor Gadget Syntax Highlighting einzubauen? Wenn ja, wie? Habe PB 4.02...
Gruss
PMTheQuick
Nur Windows :
http://win32assembly.online.fr/tut35.html
Alles andere ist viel zu langsam und unbrauchbar.
Leider ist das Tutoruial in englisch und die Beispiele
sind in ASM geschrieben. Es gibt aber davon eine
Uebersetzung, finde sie aber gerade nicht.
Edit:
http://www.joachimrohde.com/cms/xoops/m ... .php?id=93
http://win32assembly.online.fr/tut35.html
Alles andere ist viel zu langsam und unbrauchbar.
Leider ist das Tutoruial in englisch und die Beispiele
sind in ASM geschrieben. Es gibt aber davon eine
Uebersetzung, finde sie aber gerade nicht.
Edit:
http://www.joachimrohde.com/cms/xoops/m ... .php?id=93
Zuletzt geändert von edel am 03.01.2007 20:02, insgesamt 1-mal geändert.
-
- Beiträge: 630
- Registriert: 05.05.2005 19:06
Den Text verstehst du aber schon oder, denn du selber brauchst
nicht eine Zeile in ASM zu schreiben ?
Sonst such mal hier im Board, wurde schon oft genug behandelt,
leider sind alle Varianten davon, zumindest in meinen Augen,
unbrauchbar.
Als Alternative kannst du Scintilla benutzen, ts-soft muesste da
noch nen Link zu einer Lib haben.
nicht eine Zeile in ASM zu schreiben ?
Sonst such mal hier im Board, wurde schon oft genug behandelt,
leider sind alle Varianten davon, zumindest in meinen Augen,
unbrauchbar.
Als Alternative kannst du Scintilla benutzen, ts-soft muesste da
noch nen Link zu einer Lib haben.
Zuletzt geändert von edel am 03.01.2007 20:09, insgesamt 1-mal geändert.
-
- Beiträge: 630
- Registriert: 05.05.2005 19:06
-
- Beiträge: 630
- Registriert: 05.05.2005 19:06
Der Font zum zeichnen muss immer der gleiche sein wie im EditorGadget.
Also eventuell folgendenen Teil anpassen :
Macht so zwar nicht viel Sinn aber zum verstehen sollte es reichen.
Also eventuell folgendenen Teil anpassen :
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
Re: Syntax Highlighting im EditorGadget???
@edel
Das Beispiel ist Super.
Nur funktioniert es nur mit Ascii.
Könntest Du das Beispiel bitte in Unicode posten ?
Versuche von meiner Seite zu konvertieren schlugen leider fehl.
Grüße
Lite
Das Beispiel ist Super.
Nur funktioniert es nur mit Ascii.
Könntest Du das Beispiel bitte in Unicode posten ?
Versuche von meiner Seite zu konvertieren schlugen leider fehl.
Grüße
Lite