Scintilla Lib für PB 4 (Update, ist jetzt ein echtes Gadget)

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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!
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag 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
Zuletzt geändert von edel am 22.04.2006 01:00, insgesamt 1-mal geändert.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag 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 :-(
Benutzeravatar
gnozal
Beiträge: 219
Registriert: 04.12.2004 13:01
Wohnort: Frankreich (67)
Kontaktdaten:

Beitrag von gnozal »

ERROR : Invalid memory access (line 12).
For free libraries and tools, visit my web site (also home of jaPBe V3 and PureFORM).
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

OpenLibrary(0,"SciLexer.dll") <--- darauf achten ob sie geladen wurde
Benutzeravatar
gnozal
Beiträge: 219
Registriert: 04.12.2004 13:01
Wohnort: Frankreich (67)
Kontaktdaten:

Beitrag 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
For free libraries and tools, visit my web site (also home of jaPBe V3 and PureFORM).
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Jupp, genauso hatte ich das gemeint . :allright:
Benutzeravatar
Kiffi
Beiträge: 10719
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

> Now the two scintilla windows share the same document.

thanks! Unfortunately the code crashes, when i close the window.

Greetings ... Kiffi
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Ohne Callback muss du am Ende beide Gadgets mit Freegadget wieder frei
geben.
Antworten