aus einem anderen Projekt extrahiert und angepaßt.
Erstellt wird ein Fenster mit 2 ScinttillaGagets in einem Splitter. (SplitView)
SyntaxHighlightning durch Nutzung der DLL aus dem PB-SDK.
Farben werden aus den Preferences der PB-IDE gelesen.
Code: Alles auswählen
EnableExplicit
Define.s HighLightDLLPath = #PB_Compiler_Home + "Library SDK\Syntax Highlighting\SyntaxHilighting.dll"
If OpenLibrary(0, HighLightDLLPath) = #False : Debug "HL-DLL nicht gefunden" : End : EndIf
If InitScintilla("scintilla.dll") = #False : Debug "Scintilla-DLL nicht gefunden" : End : EndIf
Prototype SyntaxHighlight(*Buffer, len.l, callback.l, asm.l)
Global SyntaxHighlight.SyntaxHighlight = GetFunction(0, "SyntaxHighlight")
Enumeration; Gadgets
  #SciID
  #SciID2
  #Splitter
EndEnumeration
Enumeration; Syntax
  #SYNTAX_Text
  #SYNTAX_Keyword
  #SYNTAX_Comment
  #SYNTAX_Constant
  #SYNTAX_String
  #SYNTAX_Function
  #SYNTAX_Asm
  #SYNTAX_Operator
  #SYNTAX_Structure
  #SYNTAX_Number
  #SYNTAX_Pointer
  #SYNTAX_Separator
  #SYNTAX_Label
EndEnumeration
Define.l start_pos, Buffer, Editor
Procedure.s GetSpecialFolder(CSIDL.l)
  Protected *itemid.ITEMIDLIST
  Protected location.s = Space(#MAX_PATH)
  If SHGetSpecialFolderLocation_ (0, CSIDL, @*itemid) = #NOERROR
    If SHGetPathFromIDList_(*itemid, @location)
      If Right(location, 1) <> "\" : location + "\" : EndIf
      ProcedureReturn location
    EndIf
  EndIf
EndProcedure
Procedure SHCallback(pos, len, id)
  Shared start_pos,Buffer, Editor
  ScintillaSendMessage(Editor, #SCI_STARTSTYLING, (pos - Buffer) + start_pos, $1F)
  ScintillaSendMessage(Editor, #SCI_SETSTYLING, len, id)
EndProcedure
Procedure ScintillaCallBack(EditorGadget.l, *scinotify.SCNotification)
  Protected line_number.l
  Protected txtr.TEXTRANGE
  Protected end_pos.l
  Shared start_pos, Buffer, Editor
  
  Editor = EditorGadget
  If *scinotify\nmhdr\code = #SCN_STYLENEEDED
    line_number = ScintillaSendMessage(EditorGadget, #SCI_LINEFROMPOSITION, ScintillaSendMessage(EditorGadget, #SCI_GETENDSTYLED))
    start_pos = ScintillaSendMessage(EditorGadget, #SCI_POSITIONFROMLINE, line_number)
    end_pos     = *scinotify\Position
    txtr\chrg\cpMin = start_pos
    txtr\chrg\cpMax = end_pos
    txtr\lpstrText  = AllocateMemory(end_pos - start_pos + 1)
    Buffer          = txtr\lpstrText
    ScintillaSendMessage(EditorGadget, #SCI_GETTEXTRANGE, 0, txtr)
    SyntaxHighlight(Buffer, end_pos - start_pos, @SHCallback(), #False)
    FreeMemory(Buffer)
  EndIf
EndProcedure
Procedure CreatePBSourceView()
  Protected WFlags.l = #PB_Window_MaximizeGadget | #PB_Window_MinimizeGadget | #PB_Window_Invisible | #PB_Window_SystemMenu | #PB_Window_SizeGadget
  Protected temp.s
  If OpenWindow(1, #PB_Ignore, 0, 640, 480, "Scintilla Beispiel", WFlags)
    SmartWindowRefresh(1, #True)
    CreateGadgetList(WindowID(1))
    ScintillaGadget(#SciID, 0, 0, 0, 0, @ScintillaCallBack())
    ScintillaGadget(#SciID2, 0, 0, 0, 0, 0)
    ScintillaSendMessage(#SciID2, #SCI_SETDOCPOINTER, 0, ScintillaSendMessage(#SciID, #SCI_GETDOCPOINTER))
    SplitterGadget(#Splitter, 0, 0, 0, 0, #SciID, #SciID2)
    SetGadgetState(#Splitter, 0)
    ScintillaSendMessage(#SciID, #SCI_SETLEXER, #SCLEX_CONTAINER)
    ScintillaSendMessage(#SciID2, #SCI_SETLEXER, #SCLEX_CONTAINER)
    OpenPreferences(GetSpecialFolder(#CSIDL_APPDATA) + "PureBasic\PureBasic.prefs")
    PreferenceGroup("Editor")
    ScintillaSendMessage(#SciID, #SCI_STYLESETFORE,#STYLE_DEFAULT, $000000)
    ScintillaSendMessage(#SciID, #SCI_STYLESETBACK, #STYLE_DEFAULT, ReadPreferenceLong("BackgroundColor", $FFFFFF))
    temp = ReadPreferenceString("EditorFontName", "Courier New")
    ScintillaSendMessage(#SciID, #SCI_STYLESETFONT, #STYLE_DEFAULT, @temp)
    ScintillaSendMessage(#SciID, #SCI_STYLESETSIZE, #STYLE_DEFAULT, ReadPreferenceLong("EditorFontSize", 10))
    ScintillaSendMessage(#SciID, #SCI_STYLECLEARALL)
    ScintillaSendMessage(#SciID, #SCI_STYLESETFORE, #SYNTAX_Text, ReadPreferenceLong("NormalTextColor", 0))
    ScintillaSendMessage(#SciID, #SCI_STYLESETFORE, #SYNTAX_Keyword, ReadPreferenceLong("BasicKeywordColor", $9D030D))
    ScintillaSendMessage(#SciID, #SCI_STYLESETBOLD, #SYNTAX_Keyword, #True)
    ScintillaSendMessage(#SciID, #SCI_STYLESETFORE, #SYNTAX_Comment, ReadPreferenceLong("CommentColor", $6F884A))
    ScintillaSendMessage(#SciID, #SCI_STYLESETFORE, #SYNTAX_Constant, ReadPreferenceLong("ConstantColor", $0B46AE))
    ScintillaSendMessage(#SciID, #SCI_STYLESETFORE, #SYNTAX_String, ReadPreferenceLong("StringColor", $413C33))
    ScintillaSendMessage(#SciID, #SCI_STYLESETITALIC, #SYNTAX_String, #True)
    ScintillaSendMessage(#SciID, #SCI_STYLESETFORE, #SYNTAX_Function, ReadPreferenceLong("PureKeywordColor", $EF303D))
    ScintillaSendMessage(#SciID, #SCI_STYLESETFORE, #SYNTAX_Asm, ReadPreferenceLong("ASMKeywordColor", $400080))
    ScintillaSendMessage(#SciID, #SCI_STYLESETFORE, #SYNTAX_Operator,  ReadPreferenceLong("OperatorColor", $0000FF))
    ScintillaSendMessage(#SciID, #SCI_STYLESETFORE, #SYNTAX_Structure, ReadPreferenceLong("StructureColor", $0548B4))
    ScintillaSendMessage(#SciID, #SCI_STYLESETFORE, #SYNTAX_Number, ReadPreferenceLong("NumberColor", $0000FF))
    ScintillaSendMessage(#SciID, #SCI_STYLESETFORE, #SYNTAX_Pointer,  ReadPreferenceLong("PointerColor", $0507B4))
    ScintillaSendMessage(#SciID, #SCI_STYLESETFORE, #SYNTAX_Separator,  ReadPreferenceLong("SeparatorColor", $000000))
    ScintillaSendMessage(#SciID, #SCI_STYLESETFORE, #SYNTAX_Label,  ReadPreferenceLong("LabelColor", $804000))
    ScintillaSendMessage(#SciID, #SCI_SETMARGINTYPEN, 0, #SC_MARGIN_NUMBER)
    ScintillaSendMessage(#SciID, #SCI_SETMARGINWIDTHN, 0, 40)
    ScintillaSendMessage(#SciID, #SCI_STYLESETBACK, #STYLE_LINENUMBER, ReadPreferenceLong("LineNumberBackColor", GetSysColor_(15)))
    ScintillaSendMessage(#SciID, #SCI_STYLESETFORE, #STYLE_LINENUMBER, ReadPreferenceLong("LineNumberColor", 0))
    ScintillaSendMessage(#SciID, #SCI_SETMARGINWIDTHN, 1, 5)
    ScintillaSendMessage(#SciID2, #SCI_STYLESETFORE, #STYLE_DEFAULT, $000000)
    ScintillaSendMessage(#SciID2, #SCI_STYLESETBACK, #STYLE_DEFAULT, ReadPreferenceLong("BackgroundColor", $FFFFFF))
    temp = ReadPreferenceString("EditorFontName", "Courier New")
    ScintillaSendMessage(#SciID2, #SCI_STYLESETFONT, #STYLE_DEFAULT, @temp)
    ScintillaSendMessage(#SciID2, #SCI_STYLESETSIZE, #STYLE_DEFAULT, ReadPreferenceLong("EditorFontSize", 10))
    ScintillaSendMessage(#SciID2, #SCI_STYLECLEARALL)
    ScintillaSendMessage(#SciID2, #SCI_STYLESETFORE, #SYNTAX_Text, ReadPreferenceLong("NormalTextColor", 0))
    ScintillaSendMessage(#SciID2, #SCI_STYLESETFORE, #SYNTAX_Keyword, ReadPreferenceLong("BasicKeywordColor", $9D030D))
    ScintillaSendMessage(#SciID2, #SCI_STYLESETBOLD, #SYNTAX_Keyword, #True)
    ScintillaSendMessage(#SciID2, #SCI_STYLESETFORE, #SYNTAX_Comment, ReadPreferenceLong("CommentColor", $6F884A))
    ScintillaSendMessage(#SciID2, #SCI_STYLESETFORE, #SYNTAX_Constant, ReadPreferenceLong("ConstantColor", $0B46AE))
    ScintillaSendMessage(#SciID2, #SCI_STYLESETFORE, #SYNTAX_String, ReadPreferenceLong("StringColor", $413C33))
    ScintillaSendMessage(#SciID2, #SCI_STYLESETITALIC, #SYNTAX_String, #True)
    ScintillaSendMessage(#SciID2, #SCI_STYLESETFORE, #SYNTAX_Function, ReadPreferenceLong("PureKeywordColor", $EF303D))
    ScintillaSendMessage(#SciID2, #SCI_STYLESETFORE, #SYNTAX_Asm, ReadPreferenceLong("ASMKeywordColor", $400080))
    ScintillaSendMessage(#SciID2, #SCI_STYLESETFORE, #SYNTAX_Operator,  ReadPreferenceLong("OperatorColor", $0000FF))
    ScintillaSendMessage(#SciID2, #SCI_STYLESETFORE, #SYNTAX_Structure, ReadPreferenceLong("StructureColor", $0548B4))
    ScintillaSendMessage(#SciID2, #SCI_STYLESETFORE, #SYNTAX_Number, ReadPreferenceLong("NumberColor", $0000FF))
    ScintillaSendMessage(#SciID2, #SCI_STYLESETFORE, #SYNTAX_Pointer,  ReadPreferenceLong("PointerColor", $0507B4))
    ScintillaSendMessage(#SciID2, #SCI_STYLESETFORE, #SYNTAX_Separator,  ReadPreferenceLong("SeparatorColor", $000000))
    ScintillaSendMessage(#SciID2, #SCI_STYLESETFORE, #SYNTAX_Label,  ReadPreferenceLong("LabelColor", $804000))
    ScintillaSendMessage(#SciID2, #SCI_SETMARGINTYPEN, 0, #SC_MARGIN_NUMBER)
    ScintillaSendMessage(#SciID2, #SCI_SETMARGINWIDTHN, 0, 40)
    ScintillaSendMessage(#SciID2, #SCI_STYLESETBACK, #STYLE_LINENUMBER, ReadPreferenceLong("LineNumberBackColor", GetSysColor_(15)))
    ScintillaSendMessage(#SciID2, #SCI_STYLESETFORE, #STYLE_LINENUMBER, ReadPreferenceLong("LineNumberColor", 0))
    ScintillaSendMessage(#SciID2, #SCI_SETMARGINWIDTHN, 1, 5)
    ClosePreferences()
    ProcedureReturn 1
  EndIf
  ProcedureReturn 0
EndProcedure
If CreatePBSourceView()
  HideWindow(1, #False)
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow : Break
      Case #PB_Event_SizeWindow
        ResizeGadget(#Splitter, #PB_Ignore, #PB_Ignore, WindowWidth(1), WindowHeight(1))
    EndSelect
  ForEver  
EndIf implementiert sind
// Nachtrag:
angepaßt an PB4.10 Beta 2
