Das Code-Beispiel zeigt ein Panel-Gadget, das auf jedem Karteireiter 3 Text-Gadgets, 3 String-Gadgets und 2 Button-Gadgets platziert. Die Gadgets werden durch Aufruf der Prozedur AddNewTab() dynamisch angelegt. Die IDs der String- und Button-Gadgets werden in einem Feld (Array) gespeichert, das dynamisch bei jedem Aufruf von AddNewTab() mit ReDim vergrößert wird.
Wenn man auf die unterhalb der Karteireiter gelegene Schaltfläche "Fertig" klickt, werden alle String-Felder ausgelesen und ihr Inhalt ausgegegeben.
Das Beispiel läßt sich relativ leicht erweitern, indem man weitere Eingabefelder in die 2.Enumeration und in die Prozedur AddGadgetTab() einfügt. Die Konstante #NumGadgetsPerTab wird automatisch auf die Anzahl der Einträge der 2.Enumeration gesetzt.
Code: Alles auswählen
;=============================================================================
; Erstellung eines PanelGadget und dynamisches Anlegen von neuen
; Karteireitern mit 3 TextGadgets, 3 StringGadgets und 2 ButtonGadgets
;=============================================================================
EnableExplicit
Enumeration
#Panel
#ButtonReady
EndEnumeration
Enumeration
#OK
#AddTab
#Strength
#Intelligence
#Speed
EndEnumeration
#NumGadgetsPerTab = #PB_Compiler_EnumerationValue ; ACHTUNG! Diese Definition muß immer der obigen Enumeration folgen!
; ------ Benötigte Prozeduren deklarieren
Declare AddNewTab(NumEnemies.L)
; ------ Definition der Variablen
Define GadgetEvent.L
Define i.L
Define NumEnemies.L
; ----- Ein zweidimensionales Feld anlegen, in dem die Kennungen (IDs) der
; später dynamisch angelegten Gadgets eingetragen werden können
Dim GadgetList(#NumGadgetsPerTab - 1, 0)
; ----- Fenster öffnen
OpenWindow(0, 0, 0, 370, 150, "PanelGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
; ----- Statische Gadgets anlegen
ButtonGadget(#ButtonReady, WindowWidth(0) / 2 - 25, WindowHeight(0) - 30, 50, 20, "Fertig")
PanelGadget(#Panel, 10, 10, WindowWidth(0) - 20, WindowHeight(0) - 50)
NumEnemies = 1
AddNewTab(NumEnemies)
SetActiveGadget(GadgetList(#Strength, 0))
; ----- Ereignisschleife
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
GadgetEvent = EventGadget()
Select GadgetEvent
Case #ButtonReady
; ----- Die "Fertig"-Schaltfläche wurde angeklickt und die Ereignis-
; schleife soll beendet werden
Break
Case #Panel
; ----- Das Panel wurde angeklickt: der Fokus muß auf das erste
; Eingabefeld gesetzt werden
SetActiveGadget(GadgetList(#Strength, GetGadgetState(#Panel)))
EndSelect
For i = 0 To NumEnemies - 1
If GadgetEvent = GadgetList(#OK, i)
; ----- In einem Karteiblatt wurde auf eine OK-Schaltfläche
; geklickt
Debug "Linksklick auf 'OK' in Karteikarte " + Str(i + 1)
Break
ElseIf GadgetEvent = GadgetList(#AddTab, i)
; ----- In einem Karteiblatt wurde auf eine AddTab-Schaltfläche
; geklickt
NumEnemies + 1
AddNewTab(NumEnemies)
Break
EndIf
Next i
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
; ----- In dieser Schleife mit dem Index i wird für jedes Karteiblatt der
; Inhalt der Eingabefelder "Stärke", "Intelligenz" und "Geschwindigkeit"
; ausgegeben
For i = 0 To NumEnemies - 1
Debug ""
Debug "Gegner " + Str(i + 1) + ":"
Debug "- Stärke: " + Trim(GetGadgetText(GadgetList(#Strength, i)))
Debug "- Intelligenz: " + Trim(GetGadgetText(GadgetList(#Intelligence, i)))
Debug "- Geschwindigkeit: " + Trim(GetGadgetText(GadgetList(#Speed, i)))
Next i
End
Procedure AddNewTab(NumEnemies.L)
Shared GadgetList.L()
ReDim GadgetList(#NumGadgetsPerTab - 1, NumEnemies - 1)
AddGadgetItem (#Panel, -1, "Gegner " + Str(NumEnemies))
OpenGadgetList(#Panel, NumEnemies - 1)
TextGadget(#PB_Any, 10, 20, 40, 20, "Stärke:")
GadgetList(#Strength, NumEnemies - 1) = StringGadget(#PB_Any, 48, 17, 30, 20, "")
TextGadget(#PB_Any, 100, 20, 50, 20, "Intelligenz:")
GadgetList(#Intelligence, NumEnemies - 1) = StringGadget(#PB_Any, 155, 17, 30, 20, "")
TextGadget(#PB_Any, 210, 20, 90, 20, "Geschwindigkeit:")
GadgetList(#Speed, NumEnemies - 1) = StringGadget(#PB_Any, 295, 17, 30, 20, "")
GadgetList(#OK, NumEnemies - 1) = ButtonGadget(#PB_Any, 120, GadgetHeight(#Panel) - 50, 30, 20, "OK")
GadgetList(#AddTab, NumEnemies - 1) = ButtonGadget(#PB_Any, 160, GadgetHeight(#Panel) - 50, 80, 20, "Neuer Gegner")
CloseGadgetList()
SetGadgetState(#Panel, NumEnemies - 1)
SetActiveGadget(GadgetList(#Strength, NumEnemies - 1))
EndProcedure