Seite 3 von 5
Verfasst: 22.04.2006 00:38
von ts-soft
Da heißt, wenn der eine nen Source lädt, das der andere den Inhalt
automatisch erhält? Vorteile sehe ich keine. Die Objectvariable wird größer,
die Lib wird größer, weil ja immer Splitter mit reinkompiliert wird.
Mußte mich noch irgendwie von den Vorteilen überzeugen
Hat Scintilla eine eigenen Function dafür? Hab damit noch nie was gemacht!
Verfasst: 22.04.2006 00:50
von edel
Gibt sovieles was nicht sinnvoll ist

Finde diese Funktion aber sehr angenehm.
Code: Alles auswählen
*pdoc = *Edit\SciMsg(#SCI_GETDOCPOINTER)
*Edit\SciMsg(#SCI_ADDREFDOCUMENT,0, *pDoc)
*Edit\Resize(#PB_Ignore, #PB_Ignore, WindowWidth(0), (WindowHeight(0) - MenuHeight()) / 2)
*Edit2 = New_Scintilla(WindowID(0), 0, (WindowHeight(0) - MenuHeight()) / 2 + 2, 640, (WindowHeight(0) - MenuHeight()) / 2 - 1)
*Edit2\SciMsg(#SCI_SETDOCPOINTER,0, *pDoc)
resize bzw PB_Event_SizeWindow muss noch auskommentiert werden
Verfasst: 22.04.2006 00:59
von ts-soft
Wenn Du mir noch sagst, wie ich nen Splitter per API erstelle, ansonsten
müßte ich die Scintilla-Ctrls. in einen Container packen. Ich sehe da im
moment keine einfache Möglichkeit. Denke aber nochmal drüber nach
Bisher verwendet die Lib auch keine API, soll ja für Linux angepaßt werden,
obwohl es da ja schon eine gibt, aber wegen der Kompatibilität.
Verfasst: 22.04.2006 01:11
von edel
Code: Alles auswählen
OpenLibrary(0,"SciLexer.dll")
Procedure bla()
GetClassInfo_(0,"edit",edit.WNDCLASS)
GetClassInfo_(0,"scintilla",sci.WNDCLASS)
UnregisterClass_("edit",0)
sci\lpszClassName = @"edit"
RegisterClass_(sci)
StringGadget(0,0,0,250,250,"")
StringGadget(1,0,0,250,250,"")
SplitterGadget(2,0,0,500,500,0,1)
UnregisterClass_("edit",0)
RegisterClass_(edit)
EndProcedure
*hWindow.long = OpenWindow(#PB_Any,#PB_Ignore,#PB_Ignore,500,500,"")
CreateGadgetList(*hWindow\l)
bla()
Repeat
WindowEvent = WaitWindowEvent()
Until WindowEvent = #WM_CLOSE
Was anderes faellt mir im moment nicht ein , es sei denn du moechtes
mit winapi nen eigenen Splitter schreiben
>>Bisher verwendet die Lib auch keine API, soll ja für Linux angepaßt werden,
>>obwohl es da ja schon eine gibt, aber wegen der Kompatibilität.
boeh

Verfasst: 22.04.2006 08:49
von gnozal
ERROR : Invalid memory access (line 12).
Verfasst: 22.04.2006 09:58
von edel
OpenLibrary(0,"SciLexer.dll") <--- darauf achten ob sie geladen wurde
Verfasst: 22.04.2006 10:23
von gnozal
OpenLibrary(0,"SciLexer.dll") <--- darauf achten ob sie geladen wurde
Wrong DLL path
Now the two scintilla windows share the same document.
Code: Alles auswählen
#SCI_GETDIRECTPOINTER = 2185
#SCI_GETDOCPOINTER = 2357
#SCI_SETDOCPOINTER = 2358
Procedure bla()
Shared DLL_SciEdit
GetClassInfo_(0,"edit",edit.WNDCLASS)
GetClassInfo_(0,"scintilla",sci.WNDCLASS)
UnregisterClass_("edit",0)
sci\lpszClassName = @"edit"
RegisterClass_(sci)
StringGadget(0,0,0,250,250,"")
StringGadget(1,0,0,250,250,"")
SCIEdi = GadgetID(0)
SciEdi_WndData = SendMessage_(SCIEdi,#SCI_GETDIRECTPOINTER,0,0)
SciEdi_MsgPointer = GetProcAddress_(DLL_SciEdit,"Scintilla_DirectFunction")
SCIView = GadgetID(1)
SciEdi_WndData_SCIView = SendMessage_(SCIView,#SCI_GETDIRECTPOINTER,0,0)
SciEdi_MsgPointer_SCIView = GetProcAddress_(DLL_SciEdit,"Scintilla_DirectFunction")
pDoc = CallFunctionFast(SciEdi_MsgPointer, SciEdi_WndData, #SCI_GETDOCPOINTER, 0, 0)
CallFunctionFast(SciEdi_MsgPointer_SCIView, SciEdi_WndData_SCIView, #SCI_SETDOCPOINTER, 0, pDoc)
SplitterGadget(2,0,0,500,500,0,1)
UnregisterClass_("edit",0)
RegisterClass_(edit)
EndProcedure
DLL_SciEdit = OpenLibrary(0,"C:\PureBasic400\jaPBe\SciLexer.dll")
If DLL_SciEdit
*hWindow.Long = OpenWindow(#PB_Any,#PB_Ignore,#PB_Ignore,500,500,"")
If *hWindow
CreateGadgetList(*hWindow\l)
bla()
Repeat
WindowEvent = WaitWindowEvent()
Until WindowEvent = #WM_CLOSE
EndIf
EndIf
Verfasst: 22.04.2006 11:07
von edel
Jupp, genauso hatte ich das gemeint .

Verfasst: 22.04.2006 11:57
von Kiffi
> Now the two scintilla windows share the same document.
thanks! Unfortunately the code crashes, when i close the window.
Greetings ... Kiffi
Verfasst: 22.04.2006 12:04
von edel
Ohne Callback muss du am Ende beide Gadgets mit Freegadget wieder frei
geben.