Leider gleich noch eine Frage:
Ich habe ein Programm wo ich viele Optionen (Checkbox) habe.
Die Optionen habe ich in verschiedene Fenster aufgeteilt um es für den Anwender etwas übersichtlicher zu machen.
Da die Optionen-Fenster aber immer gleich ausschauen habe ich mir gedacht dass ich eine Funktion für alle Fenster mache.
Meine Funktion funktioniert ja eigentlich, jetzt kommt wieder das aber:
Ich habe einen Close- und OK-Button.
Wie erkenne ich beim OK-Button welche Optionen angezeigt wurden?
Natürlich habe ich wieder ein Beispiel:
AutoIt: Beispiel
#include <GUIConstantsEx.au3>
#include <Array.au3>
; Beispiel-Optionen,
Global $aOpt1[][] = [[1,TRUE],[2,TRUE],[3,FALSE],[4,TRUE],[5,TRUE],[6,TRUE],[7,FALSE],[8,FALSE],[9,TRUE],[10,FALSE] ]
Global $aOpt2[][] = [[11,TRUE],[12,TRUE],[13,FALSE],[14,TRUE],[15,TRUE] ]
Global $aOpt3[][] = [[16,TRUE],[17,TRUE],[18,FALSE],[19,TRUE],[20,TRUE],[21,TRUE],[22,FALSE] ]
Opt("GUIOnEventMode", 1)
; HauptFenster anlegen
Local $hMainGUI = GUICreate("Beispiel", 400, 60)
GUISetOnEvent($GUI_EVENT_CLOSE, "CloseButton")
GUICtrlCreateButton("Optionen1 (1-10)", 30, 20,100)
GUICtrlSetOnEvent(-1, "Opt1")
GUICtrlCreateButton("Optionen2 (11-15)", 150, 20,100)
GUICtrlSetOnEvent(-1, "Opt2")
GUICtrlCreateButton("Optionen3 (16-22)", 270, 20,100)
GUICtrlSetOnEvent(-1, "Opt3")
GUISetState(@SW_SHOW, $hMainGUI)
While 1
Sleep(100) ; Sleep
WEnd
;-----------------------------------------------------
Func CloseButton()
Exit ;Programm verlassen
EndFunc
Func Opt1()
OptionsWindow("Optionen 1",$aOpt1)
EndFunc
Func Opt2()
OptionsWindow("Optionen 2",$aOpt2)
EndFunc
Func Opt3()
OptionsWindow("Optionen 3",$aOpt3)
EndFunc
; gemeinsames Optionen-Fenster, Fenstergrösse und Positionen werden nach Anzahl Optionen berechnet
Func OptionsWindow($sTitel,$aOptionen)
;_ArrayDisplay($aOptionen,"Optionen")
Local $iObj = UBound($aOptionen)
Local $hOptionsGUI = GUICreate($sTitel, 250,100+($iObj*20))
GUISetOnEvent($GUI_EVENT_CLOSE, "CloseOptionsButton")
GUICtrlCreateGroup($sTitel, 10, 10, 230, 30+($iObj*20))
For $x = 0 to $iObj-1
GUICtrlCreateCheckbox("Option " & $aOptionen[$x][0], 20, 30 + ($x*20)) ; Optionstext aus Spalte 0
If $aOptionen[$x][1] Then GUICtrlSetState(-1,$GUI_CHECKED) ; ob Checked/Unckecked aus Spalte 1
Next
; einen gemeinsamen Button für OK
GUICtrlCreateButton("OK", 20, 60+($iObj*20), 80)
GUICtrlSetOnEvent(-1, "OKOptionsButton")
; und einen gemeinsamen Button für Close
GUICtrlCreateButton("Abbrechen", 150, 60+($iObj*20), 80)
GUICtrlSetOnEvent(-1, "CloseOptionsButton")
GUISetState(@SW_SHOW,$hOptionsGUI)
$iOptionsArrayIndex = 0
EndFunc
; Close ist kein Problem, es müssen keine Checkboxen abgefragt werden
Func CloseOptionsButton() ; gemeinsame CloseButton-Funktion für alle Options-Fenster
GUIDelete(@GUI_WinHandle) ; aktives Optionen-Fenster löschen
EndFunc
Func OKOptionsButton()
; wie erkenne ich hier welches Options-Fenster aktiv war um die Checkboses auszulesen und ins entsprechende Arry zu schreiben?
; kann man den Fenster-Titel abfragen (o.ä.) und die erzeugten Opjekte (Checkboses) abfragen
; event. geht das irgend wie über das @GUI_WinHandle
; hier würde ich gerne die Checkboxes abfragen
; Anzahl Checkboxes und dazugehörige ObjektID
;~ For $x = 0 to UBound( $ANZAHL )
;~ $aOptionen[$x][1] = _IsChecked( $ObjectID )
;~ Next
GUISetState(@SW_HIDE,@GUI_WinHandle) ; aktives Optionen-Fenster löschen
EndFunc
Alles anzeigen
Es geht mir da um die Funktion OKOptionsButton() ganz am Ende.
Gebt mir bitte mal einen Tip wie ich das lösen kann.
Vermutlich gibts da ja aber auch eine ganz andere (einfachere?) Lösung.
Danke, schon mal im vorraus.