Seite 1 von 5
Scintilla Lib für PB 4 (Update, ist jetzt ein echtes Gadget)
Verfasst: 20.04.2006 07:16
von ts-soft
Lib stimmt noch nicht ganz, da TailBite es noch nicht rafft, aber wenn es
soweit ist, soll die Lib in die PBOSL aufgenommen werden.
Im moment sind es also nur Sources, die man als Include verwenden
kann. Für die Konstanten- und Structuredefinition wurden die
Header-Dateien des Scintilla-Sources Version 1.6.8 verwendet.
Die Lib ist OOP-Mässig aufgebaut, weil dies meiner Meinung nach in diesem
Falle sinnvoll ist.
Als Beispiel ist ein fast vollwertiger Notepad-Ersatz dabei, der auf Wunsch
auch Zeilennummern anzeigt. Dieser kann natürlich für eigenen Zwecke
ausgeschlachtet oder erweitert werden
Über Wünsche, Kritik usw. würde ich mich freuen.
Der Download wurde in das Example Paket zur CreateGadget.pbi gepackt.
siehe hier:
http://www.purebasic.fr/german/viewtopic.php?t=8071
Re: Scintilla Lib für PB 4
Verfasst: 20.04.2006 09:36
von Kiffi
> Das Download-Paket umfasst auch die aktueller SciLexer.dll, sowie Doku
> dazu.
Goil! Super Arbeit, Thomas
Danke & Grüße ... Kiffi
Verfasst: 20.04.2006 10:45
von AND51
Tschuldige, wenn ich das grad noch nicht ganz raffe, aber: Ist das jetzt eine Lib, mit der ich meine EditorGadgets() aus meinem Programm verbannenund dafür dein NotepadEditor() einsetzen kann?
Ich kann mir die Datei nämlich von hier aus nicht anschauen, dazu muss ich an meinen Computer.
Verfasst: 20.04.2006 21:07
von ts-soft
AND51 hat geschrieben:Tschuldige, wenn ich das grad noch nicht ganz raffe, aber: Ist das jetzt eine Lib, mit der ich meine EditorGadgets() aus meinem Programm verbannenund dafür dein NotepadEditor() einsetzen kann?
Du kannst das Scintilla als Ersatz für EditorGadget verwenden. Darüber
hinaus ist diese DLL dafür optimiert Syntaxhighlight, Falten usw. für div.
Programmiersprachen zu ermöglichen. Ein ähnlicher Wrapper wurde für
jaPBe verwendet. Meiner untersützt jetzt aber OOP-ähnliche Syntax, die
neueste Version der DLL und PB4. Die mitgelieferte DLL unterscheidet sich zu
der Version, die mit der IDE mitgeliefert wird, darin, das alle Lexer für
verschiedenen Sprachen enthalten sind, ist deshalb auch etwas grösser.
Wer mit dem EditorGadget kein Wordpad schreiben kann, wird mit Scintilla
auch nicht viel weiter kommen
Das Beispiel ist ein unvollständiger Notepadclone, um die Funktionsweise
aufzuzeigen.
Verfasst: 20.04.2006 21:49
von edel
Code: Alles auswählen
define key.s = "procedure endprocedure procedurereturn"
*Edit\SciMsg(#SCI_SETLEXER , #SCLEX_PUREBASIC)
*Edit\SciMsg(#SCI_SETSTYLEBITS , 7 )
*Edit\SciMsg(#SCI_STYLECLEARALL)
*Edit\SciMsg(#SCI_SETKEYWORDS , 0 , @key)
*Edit\SciMsg(#SCI_STYLESETFORE ,#SCE_B_COMMENT , $0080FF )
*Edit\SciMsg(#SCI_STYLESETBACK ,#SCE_B_COMMENT , $FFFFFF )
*Edit\SciMsg(#SCI_STYLESETFORE ,#SCE_B_STRING , $0000FF )
*Edit\SciMsg(#SCI_STYLESETBACK ,#SCE_B_STRING , $FFFFFF )
*Edit\SciMsg(#SCI_STYLESETFORE ,#SCE_B_NUMBER , $0000FF )
*Edit\SciMsg(#SCI_STYLESETBACK ,#SCE_B_NUMBER , $FFFFFF )
*Edit\SciMsg(#SCI_STYLESETFORE ,#SCE_B_KEYWORD , $FF0000 )
*Edit\SciMsg(#SCI_STYLESETBACK ,#SCE_B_KEYWORD , $FFFFFF )
*Edit\SciMsg(#SCI_SETPROPERTY, @"fold", @"1")
*Edit\SciMsg(#SCI_SETPROPERTY, @"fold.compact", @"1")
*Edit\SciMsg(#SCI_SETMARGINTYPEN, 1, #SC_MARGIN_SYMBOL)
*Edit\SciMsg(#SCI_SETMARGINMASKN, 1, #SC_MASK_FOLDERS)
*Edit\SciMsg(#SCI_SETMARGINWIDTHN, 1, 15)
*Edit\SciMsg(#SCI_MARKERDEFINE, #SC_MARKNUM_FOLDEROPEN , #SC_MARK_CIRCLEMINUS)
*Edit\SciMsg(#SCI_MARKERDEFINE, #SC_MARKNUM_FOLDER , #SC_MARK_CIRCLEPLUS)
*Edit\SciMsg(#SCI_MARKERDEFINE, #SC_MARKNUM_FOLDERSUB , #SC_MARK_VLINE)
*Edit\SciMsg(#SCI_MARKERDEFINE, #SC_MARKNUM_FOLDERTAIL , #SC_MARK_LCORNERCURVE)
*Edit\SciMsg(#SCI_MARKERDEFINE, #SC_MARKNUM_FOLDEREND , #SC_MARK_CIRCLEPLUSCONNECTED)
*Edit\SciMsg(#SCI_MARKERDEFINE, #SC_MARKNUM_FOLDEROPENMID, #SC_MARK_CIRCLEMINUSCONNECTED)
*Edit\SciMsg(#SCI_MARKERDEFINE, #SC_MARKNUM_FOLDERMIDTAIL, #SC_MARK_TCORNERCURVE)
define text.s
text = "Procedure bla(val.s = " +chr(34)+"blub"+ chr(34)+ ")" + chr(10)
text + " ProcedureReturn 0"+ chr(10)
text + "EndProcedure"+ chr(10)
*Edit\SciMsg(#SCI_SETTEXT,0,@text)
Klappt super

Verfasst: 20.04.2006 22:00
von ts-soft
@hallodri
danke für Dein Snippet.
Kommt auch in Kürze zum Einsatz, werde den SimpleEditor mal um
Syntaxhighlightning für PB erweitern. Das sollte dann wohl etwas mehr
Interesse wecken

Verfasst: 20.04.2006 22:07
von edel
Dann erweitere aber auch den Lexer , der versteht nur pb 3 folding.
Waere auch sinnvoll soetwas gleich mit einzubauen . dann braucht man nicht alles 2 mal schreiben .
Code: Alles auswählen
PROCEDURE Scintilla_SetStyle(style.l,fore.l,back.l,size.l=0,fontname.s = "")
Protected *this.Scintilla
!mov [p.p_this],ebp
*this\SciMsg(#SCI_STYLESETFORE , style , fore)
*this\SciMsg(#SCI_STYLESETBACK , style , back)
IF size > 0
*this\SciMsg(#SCI_STYLESETSIZE , style , size)
ENDIF
IF fontname <> ""
*this\SciMsg(#SCI_STYLESETFONT , style , @fontname)
ENDIF
ENDPROCEDURE
Verfasst: 20.04.2006 23:16
von ts-soft
>> Dann erweitere aber auch den Lexer , der versteht nur pb 3 folding.
Muß mal gucken. Hab immer Probleme die DLL zu erzeugen, der macht
immer die Dekorationen an die Funktion, kenne mich mit VC6 nicht aus

Werde mir noch was überlegen, vielleicht hilft da ja auch jemand?
SetStyle wurde integriert! Dowload geupdated.
Weitere Vorschläge erwünscht

Verfasst: 20.04.2006 23:30
von AND51
Danke für die Erklärung!
Wenn Vorschläge gewünscht, bitte sehr: Wie wäre es, wenn das Programm Einrückungen für die nächste Zeile übernimmt? Soll heißen, wenn ich TAB drücke, Code schreibe und ENTER drücke, dann soll der Editor auch einmal autom. TAB drücken.
Find ich intreressant und das erleichtert das übersichtliche notieren des Quellcode oder anderer Texte ungemein!
Verfasst: 21.04.2006 00:36
von edel
@ts
Ich kann die DLL nur mit VS 2005 kompilieren , aber danach klappt z.b.
settext nicht mehr , keine Ahnung warum (unicode ?).
@AND51
>>
dann soll der Editor auch einmal autom. TAB drücken
Genau das sollte ein Editor koennen , nicht aber ein Control
