Im Gegensatz zu SetGadgetData/GetGadgetData kann man mit GadgetDataEx mehrere Daten unter einem spezifischen Namen (Key$) mit dem Gadget speichern. Mittels des Namens können die verschiedenen Daten wieder abgerufen werden.
Code: Alles auswählen
;/ === GadgetDataExModule.pbi [PB 5.6x] ===
;/ Extended Gadget Data
;/ October 2017 by Thorsten1867
; Gadget::SetData() - Saves the specified value with the specified gadget (similar to: SetGadgetData())
; Gadget::GetData() - Returns the data value previously stored for this gadget (similar to: GetGadgetData())
; Gadget::SetIntegerData() - Stores an integer number under the name (Key$) for this gadget
; Gadget::GetIntegerData() - Returns the integer number previously stored under the name (Key$) for this gadget
; Gadget::SetFloatData() - Stores a floating point number under the name (Key$) for this gadget (max. 10 digits)
; Gadget::GetFloatData() - Returns the floating point number previously stored under the name (Key$) for this gadget
; Gadget::SetStringData() - Stores a string under the name (Key$) for this gadget
; Gadget::GetStringData() - Returns the string previously stored under the name (Key$) for this gadget
; Gadget::FreeData() - Deletes the stored data for this gadget
DeclareModule Gadget
Declare SetData(GadgetID.i, Value.i)
Declare.i GetData(GadgetID.i)
Declare SetIntegerData(GadgetID.i, Key$, Value.i)
Declare.i GetIntegerData(GadgetID.i, Key$)
Declare SetFloatData(GadgetID.i, Key$, Value.f)
Declare.f GetFloatData(GadgetID.i, Key$)
Declare SetStringData(GadgetID.i, Key$, Value$)
Declare.s GetStringData(GadgetID.i, Key$)
Declare FreeData(GadgetID.i)
EndDeclareModule
Module Gadget
;{ ----- Definitions -----
Structure ExDataStructure
Value.i
Map String.s()
EndStructure
Global NewMap ExDG.ExDataStructure()
;} -----------------------
Procedure SetData(GadgetID.i, Value.i)
Define GId$ = Str(GadgetID)
If FindMapElement(ExDG(), GId$)
ExDG()\Value = Value
Else
AddMapElement(ExDG(), GId$)
ExDG()\Value = Value
EndIf
EndProcedure
Procedure.i GetData(GadgetID.i)
ProcedureReturn ExDG(Str(GadgetID))\Value
EndProcedure
Procedure SetIntegerData(GadgetID.i, Key$, Value.i)
Define GId$ = Str(GadgetID)
If FindMapElement(ExDG(GId$)\String(), Key$)
ExDG(GId$)\String() = Str(Value)
Else
AddMapElement(ExDG(GId$)\String(), Key$)
ExDG(GId$)\String() = Str(Value)
EndIf
EndProcedure
Procedure.i GetIntegerData(GadgetID.i, Key$)
ProcedureReturn Val(ExDG(Str(GadgetID))\String(Key$))
EndProcedure
Procedure SetFloatData(GadgetID.i, Key$, Value.f)
Define GId$ = Str(GadgetID)
If FindMapElement(ExDG(GId$)\String(), Key$)
ExDG(GId$)\String() = StrF(Value)
Else
AddMapElement(ExDG(GId$)\String(), Key$)
ExDG(GId$)\String() = StrF(Value)
EndIf
EndProcedure
Procedure.f GetFloatData(GadgetID.i, Key$)
ProcedureReturn ValF(ExDG(Str(GadgetID))\String(Key$))
EndProcedure
Procedure SetStringData(GadgetID.i, Key$, Value$)
Define GId$ = Str(GadgetID)
If FindMapElement(ExDG(GId$)\String(), Key$)
ExDG(GId$)\String() = Value$
Else
AddMapElement(ExDG(GId$)\String(), Key$)
ExDG(GId$)\String() = Value$
EndIf
EndProcedure
Procedure.s GetStringData(GadgetID.i, Key$)
ProcedureReturn ExDG(Str(GadgetID))\String(Key$)
EndProcedure
Procedure FreeData(GadgetID.i)
DeleteMapElement(ExDG(), Str(GadgetID))
EndProcedure
EndModule
CompilerIf #PB_Compiler_IsMainFile
#Window = 0
#ComboBox = 1
#Button = 2
If OpenWindow(#Window, 200, 200, 120, 70, "Test Extended Gadget Data")
ComboBoxGadget(#ComboBox, 10, 10, 110, 20)
AddGadgetItem(#ComboBox, -1, "Apple")
AddGadgetItem(#ComboBox, -1, "Pear")
AddGadgetItem(#ComboBox, -1, "Banana")
ButtonGadget(#Button, 35, 35, 60, 25, "Apply")
EndIf
SetGadgetState(#ComboBox, 0)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Gadget
Select EventGadget()
Case #Button
Debug "Last: " + Gadget::GetStringData(#ComboBox, "Fruit")
Debug "Current: " + GetGadgetText(#ComboBox)
Gadget::SetData(#ComboBox, GetGadgetState(#ComboBox))
Gadget::SetStringData(#ComboBox, "Fruit", GetGadgetText(#ComboBox))
Case #ComboBox
If EventType() = #PB_EventType_Change
Debug "--> " + GetGadgetState(#ComboBox)
EndIf
EndSelect
EndSelect
ForEver
Debug "============================="
Debug "Last Combobox state: "+Gadget::GetData(#ComboBox)
Debug "Last Selection: "+Gadget::GetStringData(#ComboBox, "Fruit")
Debug "============================="
Gadget::FreeData(#ComboBox)
CompilerEndIf