SyntaxHighlighting für PB4.10 (ScintillaGadget)

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
Programie
Beiträge: 1280
Registriert: 06.08.2005 22:56
Computerausstattung: https://www.sysprofile.de/id160800
Wohnort: Gernsbach
Kontaktdaten:

Beitrag von Programie »

@ts-soft: Ok, so geht es. Thx :allright:
BildBildBildBild
Benutzeravatar
Olafmagne
Beiträge: 130
Registriert: 07.12.2017 17:30
Wohnort: Sete/Frankreich

Re:

Beitrag von Olafmagne »

Hallo
ich versuche gerade,Scintilla zu verstehen,und habe dazu den folgenden Code von @Edel genommen
edel hat geschrieben:Beispiel :

Code: Alles auswählen

;##################################################################
;#                                                                 
;#                                                                 
;#                                                                 
;##################################################################
Procedure SetStyle(id,style,fore,back,bold=-1,italic=-1,size=0,font.s="")
	
  ScintillaSendMessage(id,#SCI_STYLESETFORE, style, fore)
  ScintillaSendMessage(id,#SCI_STYLESETBACK, style, back)
  
  If italic > -1
    ScintillaSendMessage(id,#SCI_STYLESETITALIC, style, italic)
  EndIf
  
  If bold > -1
    ScintillaSendMessage(id,#SCI_STYLESETBOLD, style, bold)
  EndIf
  
  If size > 0
    ScintillaSendMessage(id,#SCI_STYLESETSIZE, style, size)
  EndIf
  
  If font
    ScintillaSendMessage(id,#SCI_STYLESETFONT, style, @font)
  EndIf
	
EndProcedure

;##################################################################
;#                                                                 
;#                                                                 
;#                                                                 
;##################################################################
ProcedureDLL ScintillaCallBack(Gadget, *scinotify.SCNotification)
  
  Protected line = ScintillaSendMessage(Gadget,#SCI_LINEFROMPOSITION,*scinotify\position)
  
  If *scinotify\margin = 1
    ScintillaSendMessage(Gadget,#SCI_TOGGLEFOLD, line, 0)
  EndIf
  
  
EndProcedure

;##################################################################
;#                                                                 
;#                                                                 
;#                                                                 
;##################################################################
Procedure NewSciGadget(id,x,y,cx,cy,cb=0)
  Protected Gadget , keyword.s
  Static Init
  
  If Not Init
    InitScintilla("scilexer")
  EndIf
  
  Gadget = ScintillaGadget(id,x,y,cx,cy,cb)
  
  If id <> #PB_Any
    Gadget = id
  EndIf 
  
  ; lexer default
  ScintillaSendMessage(Gadget,#SCI_SETLEXER,#SCLEX_VB)
  ScintillaSendMessage(Gadget,#SCI_SETSTYLEBITS, 5)
  
  SetStyle(Gadget,#STYLE_DEFAULT, #Black, #White,#PB_Default,#PB_Default,10, "courier new") 
	ScintillaSendMessage(Gadget,#SCI_STYLECLEARALL)
  
  
  ; keyyword
  
  keyword = "addressof alias and as attribute base begin binary boolean byref byte byval call case compare "
  keyword + "const currency date decimal declare defbool defbyte defint deflng defcur defsng defdbl defdec "
  keyword + "defdate defstr defobj defvar dim do double each else elseif empty end enum eqv erase error "
  keyword + "event exit explicit false for friend function get gosub goto if imp implements in input integer "
  keyword + "is len let lib like load lock long loop lset me mid midb mod new next not nothing null object "
  keyword + "on option optional or paramarray preserve print private property public raiseevent randomize "
  keyword + "redim rem resume return rset seek select set single static step stop string sub then time to "
  keyword + "true type typeof unload until variant wend while with withevents xor"
  
  
  ScintillaSendMessage(Gadget,#SCI_SETKEYWORDS,0,@keyword)
  SetStyle(Gadget,#SCE_B_KEYWORD  , #Blue   , #White,#True)  
  
  ScintillaSendMessage(Gadget,#SCI_SETKEYWORDS,1,@"option explicit")
  SetStyle(Gadget,#SCE_B_KEYWORD2 , #red    , #White,#True)  
  
  ScintillaSendMessage(Gadget,#SCI_SETKEYWORDS,2,@"blub")
  SetStyle(Gadget,#SCE_B_KEYWORD3 , $FFFFFF , $C0C0C0)
  
  SetStyle(Gadget,#SCE_B_NUMBER   , #red    , #White)  
  SetStyle(Gadget,#SCE_B_COMMENT  , $C0C0C0  , #White)
  
  
  ;line number
  ScintillaSendMessage(Gadget,#SCI_SETMARGINWIDTHN, 0, 30)
  
  ; folding
  ScintillaSendMessage(Gadget,#SCI_SETPROPERTY, @"fold", @"1") 
   
  ScintillaSendMessage(Gadget,#SCI_SETMARGINTYPEN,  1, #SC_MARGIN_SYMBOL)
  ScintillaSendMessage(Gadget,#SCI_SETMARGINMASKN,  1, #SC_MASK_FOLDERS)
  ScintillaSendMessage(Gadget,#SCI_SETMARGINWIDTHN, 1, 20)
  
  ScintillaSendMessage(Gadget,#SCI_SETMARGINSENSITIVEN, 1, 1)
  
  ScintillaSendMessage(Gadget,#SCI_MARKERDEFINE, #SC_MARKNUM_FOLDEROPEN     , #SC_MARK_MINUS) 
  ScintillaSendMessage(Gadget,#SCI_MARKERDEFINE, #SC_MARKNUM_FOLDER         , #SC_MARK_PLUS) 
  ScintillaSendMessage(Gadget,#SCI_MARKERDEFINE, #SC_MARKNUM_FOLDERSUB      , #SC_MARK_EMPTY) 
  ScintillaSendMessage(Gadget,#SCI_MARKERDEFINE, #SC_MARKNUM_FOLDERTAIL     , #SC_MARK_EMPTY) 
  ScintillaSendMessage(Gadget,#SCI_MARKERDEFINE, #SC_MARKNUM_FOLDEREND      , #SC_MARK_EMPTY) 
  ScintillaSendMessage(Gadget,#SCI_MARKERDEFINE, #SC_MARKNUM_FOLDEROPENMID  , #SC_MARK_EMPTY) 
  ScintillaSendMessage(Gadget,#SCI_MARKERDEFINE, #SC_MARKNUM_FOLDERMIDTAIL  , #SC_MARK_EMPTY)
 
EndProcedure

;##################################################################
;#                                                                 
;#                                                                 
;#                                                                 
;##################################################################
Procedure main()
  Protected hWnd
  
  hWnd = OpenWindow(0,#PB_Ignore,#PB_Ignore,640,480,"leer",#WS_OVERLAPPEDWINDOW)
  SmartWindowRefresh(0,1)
  CreateGadgetList(hWnd)
  
  NewSciGadget(0,0,0,640,480,@ScintillaCallBack())
  
  text.s = "Function test()"        + #lf$
  text.s + "  ' blub"               + #lf$
  text.s + "  Dim blub as Integer " + #lf$
  text.s + "End Function "          + #lf$
  
  SetGadgetText(0,text+#lf$+text)
  
  
  Repeat
    event = WaitWindowEvent()
    
    If event = #PB_Event_SizeWindow
      ResizeGadget(0,#PB_Ignore,#PB_Ignore,WindowWidth(0),WindowHeight(0))
    EndIf
    
  Until event = #PB_Event_CloseWindow
	
	
EndProcedure:main()

Nun habe ich eine Frage:

Die Zeilennummer wird zwar angezeigt, aber diese ist praktisch unlesbar, weil weiss auf 'fastweiss'.
Trotz Tagelanges Studieren der Scintilla-Dokumentation weiss ich immer noch nicht, wie ich die Farbe
des LineNumber-Margin's ändern kann(Vorder & Hinter-GrundFarbe)

Die Doku ist im übrigem :freak: >_< :praise: :lamer:
Unsinnige Anweisungen von Seiten des Chef's lösen grundsätzlich ein "Syntax Error" bei mir aus
OS=Windows 11
PB=5.31/5.73/6 <> BlitzPlus/Blitz3D <> FreeBasic
Antworten