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

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
Kiffi
Beiträge: 10719
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

hallodri hat geschrieben:Ohne Callback muss du am Ende beide Gadgets mit Freegadget wieder frei geben.
aha, wusste ich nicht. Ich wollte nur mal mit Copy&Paste anschauen, was Ihr
da schönes bastelt. :-)

Grüße ... Kiffi
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 »

@Kiffi
Dafür gibts ja die Lib, das man Destroyen des Fensters automatisch erledigt :wink:

@edel und gnozal
Euer nettes Beispiel ist für mich nicht verwendbar. Bau einfach mal einen
FontRequester ein, dann wirste sehen, wie durcheinande Windows ist :mrgreen:
Vielleicht kommt ja bald TailBite, dann kann ich es ja als Gadget registrieren,
dann sollte es keine Probleme mehr geben.
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 »

Mein Fehler , habe nicht daran gedacht das man keine Klasse zerstoeren
kann, solange sie ein Fenster hat. :-(
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 »

Update: Das erstellte Scintilla-Control ist ein echtes Gadget!
(#PB_Any wird auch unterstützt)

besonderen Dank an hallodri :allright:

Wozu das ganze?
Damit man zum Beispiel auch ein SplitView erzeugen kann :wink:

Code: Alles auswählen

EnableExplicit

XIncludeFile "Scintilla.pb"

Scintilla_Init() ; Initfunktion, wird später in der Lib nicht mehr gebraucht


Define.Scintilla *Edit1, *Edit2 ; Objectvariable für Scintilla-Control definieren
Define.l Splitter, *pdoc

#PB_Window_Flags = #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MaximizeGadget|#PB_Window_MinimizeGadget
If OpenWindow(0, #PB_Ignore, 0, 640, 480, "SplitView", #PB_Window_Flags) = #False : End : EndIf

RemoveKeyboardShortcut(0, #PB_Shortcut_All) ; Ansonsten funktioniert TAB nicht!

If CreateGadgetList(WindowID(0))
  *Edit1 = New_Scintilla(#PB_Any, 0, 0, 0, 0)
  *Edit2 = New_Scintilla(#PB_Any, 0, 0, 0, 0)
  *pdoc = *Edit1\SciMsg(#SCI_GETDOCPOINTER)
  *Edit2\SciMsg(#SCI_SETDOCPOINTER, 0, *pDoc)
  Splitter = SplitterGadget(#PB_Any, 0, 0, 640, 480, *Edit1\Id, *Edit2\Id)
  SetActiveGadget(*Edit1\Id)
EndIf

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      Break
    Case #PB_Event_SizeWindow
      ResizeGadget(Splitter, #PB_Ignore, #PB_Ignore, WindowWidth(0), WindowHeight(0))
  EndSelect
ForEver

Scintilla_End() ; Endfunktion, wird später in der Lib nicht mehr gebraucht
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
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 »

Weils so schön ist, nochmals geupdatet!
Optionales Callback kann angegeben werden!

Code: Alles auswählen

EnableExplicit

XIncludeFile "Scintilla.pb"

Scintilla_Init() ; Initfunktion, wird später in der Lib nicht mehr gebraucht

Enumeration ; Gadgets
  #Sci1
  #Sci2
  #Splitter
EndEnumeration

Procedure SciCallback(*Gadget.long, Window, Message, wParam, lParam)
  Protected *msg.SCNotification
  Select Message
    Case #WM_NOTIFY
      *msg = lParam
      If *msg\NMHDR\hwndFrom = *Gadget\l
        Select *msg\NMHDR\code
          Case #SCN_UPDATEUI
            Debug "SCN_UPDATEUI"
          Case #SCN_CHARADDED
            Debug "SCN_CHARADDED"
          Case #SCN_DOUBLECLICK
            Debug "SCN_DOUBLECLICK"
          Case #SCN_MODIFIED
            Debug "SCN_MODIFIED"
        EndSelect
      EndIf
  EndSelect
EndProcedure

Define.Scintilla *Edit1, *Edit2 ; Objectvariable für Scintilla-Control definieren
Define.l *pdoc

#PB_Window_Flags = #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MaximizeGadget|#PB_Window_MinimizeGadget
If OpenWindow(0, #PB_Ignore, 0, 640, 480, "SplitView", #PB_Window_Flags) = #False : End : EndIf

RemoveKeyboardShortcut(0, #PB_Shortcut_All) ; Ansonsten funktioniert TAB nicht!

If CreateGadgetList(WindowID(0))
  *Edit1 = New_Scintilla(#Sci1, 0, 0, 0, 0, @SciCallback())
  *Edit2 = New_Scintilla(#Sci2, 0, 0, 0, 0, @SciCallback())
  *pdoc = *Edit1\SciMsg(#SCI_GETDOCPOINTER)
  *Edit2\SciMsg(#SCI_SETDOCPOINTER, 0, *pDoc)
  SplitterGadget(#Splitter, 0, 0, 640, 480, #Sci1, #Sci2)
  SetGadgetState(#Splitter, 360)
  SetActiveGadget(#Sci1)
EndIf

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      Break
    Case #PB_Event_SizeWindow
      ResizeGadget(#Splitter, #PB_Ignore, #PB_Ignore, WindowWidth(0), WindowHeight(0))
  EndSelect
ForEver

Scintilla_End() ; Endfunktion, wird später in der Lib nicht mehr gebraucht
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 »

Es handelt sich aber dabei um den Callback des Parentfenster.

Starte den Callback lieber ueber ein Prototyp , Das *Gadget.long
irritiert etwas.
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:Es handelt sich aber dabei um den Callback des Parentfenster.

Starte den Callback lieber ueber ein Prototyp , Das *Gadget.long
irritiert etwas.
Was heißt das mit dem Parentfenster, ist das nicht korrekt?
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
gnozal
Beiträge: 219
Registriert: 04.12.2004 13:01
Wohnort: Frankreich (67)
Kontaktdaten:

Beitrag von gnozal »

Nice example, but who knows how long this ASM stuff is valid ?

Code: Alles auswählen

!EXTRN _PB_Object_GetOrAllocateID@8
  !EXTRN _PB_Gadget_RegisterGadget@16
  !EXTRN _PB_Gadget_Globals
  !EXTRN _PB_Gadget_Objects
  !MOV   eax,[_PB_Gadget_Objects]
  !MOV   [p.v_ObjectList],eax
  !MOV   [p.v_GetOrAllocateID],dword _PB_Object_GetOrAllocateID@8
  !MOV   [p.v_RegisterGadget],dword _PB_Gadget_RegisterGadget@16
  !MOV   eax,[_PB_Gadget_Globals]
  !MOV   eax,[eax]
  !MOV   [p.v_parent],eax
PB internals change all the time...
For free libraries and tools, visit my web site (also home of jaPBe V3 and PureFORM).
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 »

gnozal hat geschrieben:Nice example, but who knows how long this ASM stuff is valid ?

Code: Alles auswählen

!EXTRN _PB_Object_GetOrAllocateID@8
  !EXTRN _PB_Gadget_RegisterGadget@16
  !EXTRN _PB_Gadget_Globals
  !EXTRN _PB_Gadget_Objects
  !MOV   eax,[_PB_Gadget_Objects]
  !MOV   [p.v_ObjectList],eax
  !MOV   [p.v_GetOrAllocateID],dword _PB_Object_GetOrAllocateID@8
  !MOV   [p.v_RegisterGadget],dword _PB_Gadget_RegisterGadget@16
  !MOV   eax,[_PB_Gadget_Globals]
  !MOV   eax,[eax]
  !MOV   [p.v_parent],eax
PB internals change all the time...
Diese Lib befindet sich ja auch in Entwicklung :wink:
Der ASM stuff ist übersetzt vom Library SDK, ich hoffe, da gibts nicht mehr
allzuviele Änderungen :D
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 »

ts-soft hat geschrieben:
hallodri hat geschrieben:Es handelt sich aber dabei um den Callback des Parentfenster.

Starte den Callback lieber ueber ein Prototyp , Das *Gadget.long
irritiert etwas.
Was heißt das mit dem Parentfenster, ist das nicht korrekt?
Kommt darauf an was du machen moechtest , dieser Callback ist sehr
nuetzlich, aber eben nicht der des ScintillaGadgets. Brauche ich jetzt
z.b. wm_char muss ich es nochmal "subclassen".
Antworten