Modul Named GadgetData

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Re: Modul Named GadgetData

Beitrag 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.
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: Modul Named GadgetData

Beitrag 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()

Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Re: Modul Named GadgetData

Beitrag 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 ;)
Zuletzt geändert von Bisonte am 09.11.2015 13:43, insgesamt 1-mal geändert.
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: Modul Named GadgetData

Beitrag von edel »

Verstehe das Problem jetzt nicht :?
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Modul Named GadgetData

Beitrag 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
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: Modul Named GadgetData

Beitrag 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. :lol:
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Modul Named GadgetData

Beitrag 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
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Modul Named GadgetData

Beitrag 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 :cry:

Bugreport http://www.purebasic.fr/english/viewtop ... 24&t=63979
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Modul Named GadgetData

Beitrag 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...

:wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Re: Modul Named GadgetData

Beitrag von GPI »

Hiho, ich hab das ganze mal unter PureBasic-CodeArchiv-Rebirth\Gadgets\NamedGadgetData.pbi aufgenommen.
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Antworten