Was genau meinst Du mit "Umbiegen der Freefunktion" ?edel hat geschrieben:Wie sieht es mit dem Umbiegen der Freefunktion aus? Denn die wird immer aufgerufen.
FreeGadget doch wohl nicht... das wird beim schliessen von Fenstern nicht aufgerufen.
Was genau meinst Du mit "Umbiegen der Freefunktion" ?edel hat geschrieben:Wie sieht es mit dem Umbiegen der Freefunktion aus? Denn die wird immer aufgerufen.
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()
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;
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;
Code: Alles auswählen
Structure Gadget
handle.i
CompilerIf #PB_Compiler_OS = #PB_OS_Linux
*container
CompilerEndIf
*vt.GadgetVT
EndStructure
Das stand da noch nicht, da hab ich wohl gerade geantwortet.Aber mit ComperIF's umdekorieren und dann sollte es dort auch gehen.