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