Seite 3 von 5

Verfasst: 22.04.2006 00:38
von ts-soft
hallodri hat geschrieben:http://www.qwhale.net/_img/products/edi ... itview.gif

Ja , aber da es sich um 2 Fenster handelt die das gleiche Dokument
haben koennte man das doch von vorneherein unterstuetzen.
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 :wink:
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 :wink:

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 :oops:

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 . :allright:

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.