Seite 3 von 4
Re: Modul Named GadgetData
Verfasst: 09.11.2015 12:01
von Bisonte
edel hat geschrieben:Wie sieht es mit dem Umbiegen der Freefunktion aus? Denn die wird immer aufgerufen.
Was genau meinst Du mit "Umbiegen der Freefunktion" ?
FreeGadget doch wohl nicht... das wird beim schliessen von Fenstern nicht aufgerufen.
Re: Modul Named GadgetData
Verfasst: 09.11.2015 12:20
von edel
Die interne Funktion aber schon, sofern vorhanden.
Code: Alles auswählen
PrototypeC pFreeGadget(gadget)
Global *oldFree.pFreeGadget
Import ""
PB_Gadget_Objects
PB_Object_GetObject(obj, *gadget)
EndImport
Structure GadgetVT
GadgetType.l
SizeOf.l
*GadgetCallback
*free.pFreeGadget
EndStructure
Structure Gadget
handle.i
*vt.GadgetVT
EndStructure
Procedure GadgetFreeCallback(*Gadget.Gadget)
Debug "MyFreeCallback"
If *oldFree
*oldFree(*Gadget)
EndIf
EndProcedure
Procedure InstallOwnFreeCallback(Gadget, cb)
Protected *Gadget.Gadget = PB_Object_GetObject(PB_Gadget_Objects, Gadget)
If *Gadget
*oldFree = *Gadget\vt\free
*Gadget\vt\free = cb
EndIf
EndProcedure
Procedure Main()
If OpenWindow(0, 0, 0, 400, 400, "")
ButtonGadget(0, 0, 0, 100, 30, "blank") : InstallOwnFreeCallback(0, @GadgetFreeCallback())
StringGadget(0, 0, 0, 100, 30, "blank") : InstallOwnFreeCallback(0, @GadgetFreeCallback())
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
EndProcedure: End Main()
Re: Modul Named GadgetData
Verfasst: 09.11.2015 12:55
von Bisonte
Ok... allerdings wird das (ich habe kein Einblick in das SDK beim MAC) dürfte unter Linux schonmal nicht mehr funktionieren.
Dort wird die Struktur (bei Dir "Gadget") anders definiert.
Code: Alles auswählen
typedef struct PB_GadgetStructure
{
M_GadgetType Gadget;
M_GadgetType Container; // Container gadget, as a listIcon can be in a ScrolledWindow and when we use the splittergadget, we get tricked..
PB_GadgetVT *VT;
integer UserData;
integer Data[4];
} PB_Gadget;
In den Windows SDK steht
Code: Alles auswählen
typedef struct PB_GadgetStructure
{
HWND Gadget;
PB_GadgetVT *VT;
integer UserData; // for Get/SetGadgetData
WNDPROC OldCallback; // for PB_Gadget_RegisterDestroy
integer Data[4]; // for gadget internal data. (mostly used for front/backcolor and such).
} PB_Gadget;
Ist also noch ein Wert mehr dazwischen (wegen dem vTable)... wie gesagt, wie es beim Mac aussieht, kann ich wegen Fehlens eines solchen nicht sagen.
Aber mit CompilerIF's umdekorieren und dann sollte es dort auch gehen.
Edit : Böser Typo korrigiert

Re: Modul Named GadgetData
Verfasst: 09.11.2015 12:59
von edel
Verstehe das Problem jetzt nicht

Re: Modul Named GadgetData
Verfasst: 09.11.2015 13:11
von NicTheQuick
Na du musst die Struktur Gadget ändern, damit es auch unter Linux funktioniert. Zum Beispiel so:
Code: Alles auswählen
Structure Gadget
handle.i
CompilerIf #PB_Compiler_OS = #PB_OS_Linux
*container
CompilerEndIf
*vt.GadgetVT
EndStructure
Re: Modul Named GadgetData
Verfasst: 09.11.2015 13:38
von edel
Aber mit ComperIF's umdekorieren und dann sollte es dort auch gehen.
Das stand da noch nicht, da hab ich wohl gerade geantwortet.

Re: Modul Named GadgetData
Verfasst: 09.11.2015 21:40
von mk-soft
Es gibt jetzt für Linux und Mac eine aktualisierte SDK...
Bei Mac steige ich noch nicht durch. Windows und Linux habe diese schon mal Realisiert.
http://www.purebasic.fr/german/viewtopi ... olorGadget
Re: Modul Named GadgetData
Verfasst: 13.11.2015 22:05
von mk-soft
Update v1.04
Räumt jetzt automatisch die Daten bei CloseWindow oder bei FreeGadget von ContainerGadget auf
Geht doch ganz einfach die Daten zu bereinigen...
Leider nicht unter Mac
Bugreport
http://www.purebasic.fr/english/viewtop ... 24&t=63979
Re: Modul Named GadgetData
Verfasst: 13.12.2015 01:26
von mk-soft
Update v1.05
- Fixed: Läuft jetzt auch unter MacOS
- Added: Überprüfung von PanelGadget (RemoveGadgetItem)
Bei MacOS wird erst beim nächsten Event die Ressourcen freigegeben. Habe es somit mit eine eigenen Event gelöst.
Mit der PB Version 5.41 für Mac werden bei CloseWindow die Ressourcen schon freigeben.
Aber leider nicht bei FreeGadget...

Re: Modul Named GadgetData
Verfasst: 19.12.2015 22:06
von GPI
Hiho, ich hab das ganze mal unter PureBasic-CodeArchiv-Rebirth\Gadgets\NamedGadgetData.pbi aufgenommen.