In Variablen Namen von UDFs speichern, die später ausgeführt werden?

  • Ich hatte vor, in einem zweidimensionalen Array zu speichern, welche Checkboxen aktiviert wurden (das funzt auch) und die dazugehörige Funktion, die aufgerufen werden soll, sofern die Checkbox aktiviert wurde.

    hier ma mein Kot bis jetz:

    Spoiler anzeigen
    [autoit]

    $nix = True
    For $i = 0 To Ubound($array,1) - 1
    $array[$i][0] = GUICtrlRead($i+4)
    If $array[$i][0] = 1 Then
    $nix = False
    ExitLoop
    EndIf
    Next
    If $nix = True Then
    If MsgBox(0x34, "Möööööp", "Sie haben keine zu installierenden Programme ausgewählt. Beenden?") = 6 Then
    Exit
    EndIf
    Else
    For $i = 0 To Ubound($array,1) - 1
    If $array[$i][0] = 1 Then
    ; Hier soll dann die Funktion aufgerufen werden, welche in $array[$i][1] gespeichert wurde
    EndIf
    Next
    EndIf

    [/autoit]


    Meine Frage(n) nu: Wie kann ich dort
    1. Speichern, welche Funktion er öffnen soll und
    2. Diese dann aufrufen

    Kleine Hinweise: Die Checkboxen-CtrlIDs beginnen bei 4, deswegen $i+4

    2 Mal editiert, zuletzt von dorfmopp (21. Dezember 2006 um 23:55)

    • Offizieller Beitrag

    Meinst du so etwas:

    [autoit]

    Dim $aCheckBox[5][2]
    $aCheckBox[0][0] = GUICtrlCreateCheckbox("box1", 10, 10)
    $aCheckBox[1][0] = GUICtrlCreateCheckbox("box2", 10, 30)
    $aCheckBox[2][0] = GUICtrlCreateCheckbox("box3", 10, 50)
    $aCheckBox[3][0] = GUICtrlCreateCheckbox("box4", 10, 70)
    $aCheckBox[4][0] = GUICtrlCreateCheckbox("box5", 10, 90)
    $aCheckBox[0][1] = "ProgrammPfad1"
    $aCheckBox[1][1] = "ProgrammPfad2"
    $aCheckBox[2][1] = "ProgrammPfad3"
    $aCheckBox[3][1] = "ProgrammPfad4"
    $aCheckBox[4][1] = "ProgrammPfad5"
    ; .....
    ; .....
    For $i = 0 To UBound($aCheckBox)-1
    If GUICtrlRead($aCheckBox[$i][0]) = 1 Then
    RunWait($aCheckBox[$i][1])
    EndIf
    Next

    [/autoit]
  • jo in etwa ... nur, dass ich die Installationsautomation aufrufen möchte und nicht nur ein spezielles Programm.
    wenn ich aber z.B. $aCheckBox[0][1] = AcrobatReaderInstall() schreibe, ruft er die Funktion ja sofort auf.
    Schreibe ich AcrobatReaderInstall() in Anführungszeichen, sagt er mir, dass er die Datei nicht finden kann (logisch, gibt ja keine)

    €: yay lvl 2 ^^

    €²: habs gefunden ... mit Call müsstes gehen

    €³: j0w, funzt

    3 Mal editiert, zuletzt von dorfmopp (22. Dezember 2006 um 12:19)

    • Offizieller Beitrag

    Du kannst auch erst alle Installpfade in einem eigenen Array sammeln und dann irgendwann später ausführen:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    ; .....
    ; .....
    Dim $aCheckBox[5][2], $aInstall
    $aCheckBox[0][0] = GUICtrlCreateCheckbox("box1", 10, 10)
    $aCheckBox[1][0] = GUICtrlCreateCheckbox("box2", 10, 30)
    $aCheckBox[2][0] = GUICtrlCreateCheckbox("box3", 10, 50)
    $aCheckBox[3][0] = GUICtrlCreateCheckbox("box4", 10, 70)
    $aCheckBox[4][0] = GUICtrlCreateCheckbox("box5", 10, 90)
    $aCheckBox[0][1] = "ProgrammPfad1"
    $aCheckBox[1][1] = "ProgrammPfad2"
    $aCheckBox[2][1] = "ProgrammPfad3"
    $aCheckBox[3][1] = "ProgrammPfad4"
    $aCheckBox[4][1] = "ProgrammPfad5"
    ; .....
    ; .....
    For $i = 0 To UBound($aCheckBox)-1
    If GUICtrlRead($aCheckBox[$i][0]) = 1 Then
    If Not IsArray($aInstall) Then
    $aInstall = _ArrayCreate($aCheckBox[$i][1])
    Else
    _ArrayAdd($aInstall, $aCheckBox[$i][1])
    EndIf
    EndIf
    Next
    ; ....
    ; ....
    For $i = 0 To UBound($aInstall)-1
    RunWait($aInstall[$i])
    Next

    [/autoit]