GUI Buttons inkl. Funktionszuordnung per Schleifen erstellen

  • ich möchte folgenden Code zwecks Uebersicht verkleinern(20Buttons)

    Spoiler anzeigen
    [autoit]


    ;Kommentiert sind die Werte die sich im Schleifendurchlauf verändern müssen
    $Button_Starte_Installation1 = GUICtrlCreateButton("S", 4, 45, 20, 32) ;[1,45]
    GUICtrlSetOnEvent(-1, "Button_Starte_Installation1Click") ;1
    $Button_Starte_Installation2 = GUICtrlCreateButton("S", 4, 80, 20, 32) ;[2,80]
    GUICtrlSetOnEvent(-1, "Button_Starte_Installation2Click") ;2
    ;usw.........................
    Func Button_Starte_Installation1Click() ;1
    BlockInput(1)
    GUICtrlSetBkColor($Button_Starte_Installation1, 0xFF0000) ;1
    Endfunc
    Func Button_Starte_Installation2Click() ;2
    BlockInput(1)
    GUICtrlSetBkColor($Button_Starte_Installation2, 0xFF0000) ;2
    Endfunc
    ;usw.........................

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

    ;das wäre mein Lösungsansatz:
    Local $__koordinaten[4][2] = [[1,45], [2,80]]
    Local $i_Button_Nummer
    Local $y_koordinaten_1_bis_2
    Local $Button_Starte_Installation[20]

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

    For $i_Button_Nummer = 0 to UBound($__koordinaten, 1) - 1
    For $y_koordinaten_1_bis_2 = 0 to UBound($__koordinaten, 2) - 1
    $Button_Starte_Installation[$i_Button_Nummer] = GUICtrlCreateButton("S", 4, [$y_koordinaten_1_bis_2], 20, 32)
    GUICtrlSetOnEvent(-1, Button_Starte_Installation1Click) ;wie wechsel ich von 1 auf 2?
    Next
    Next

    [/autoit]

    2 Mal editiert, zuletzt von m47 (25. Juni 2012 um 04:13)

    • Offizieller Beitrag

    Das kann man noch erweitern auf den Buttontext:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    Opt('GUIOnEventMode', 1)

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

    Global $aCoord[4][3] = [[10, 10, 'Test1'], [100, 10, 'Test2'], [10, 40, 'Test3'], [100, 40, 'Test4']], $ahButton[UBound($aCoord)]
    $hGui = GUICreate('Test', 220, 200)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_End')
    For $i = 0 To UBound($aCoord) - 1
    $ahButton[$i] = GUICtrlCreateButton($aCoord[$i][2], $aCoord[$i][0], $aCoord[$i][1], 80, 25)
    GUICtrlSetOnEvent(-1, '_Buttonpressed')
    Next
    GUISetState()
    While Sleep(100)
    WEnd

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

    Func _End()
    Exit
    EndFunc

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

    Func _Buttonpressed()
    Local $iClick = @GUI_CtrlId - $ahButton[0]
    GUICtrlSetState($ahButton[$iClick], $GUI_DISABLE)
    MsgBox(0, 'Test', GUICtrlRead(@GUI_CtrlId) & ' wurde angeklickt')
    EndFunc

    [/autoit]
  • 2 primitive Fragen:)

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    Opt('GUIOnEventMode', 1)

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

    Global $aCoord[4][3] = [[10, 10, 'Test1'], [100, 10, 'Test2'], [10, 40, 'Test3'], [100, 40, 'Test4']], $ahButton[UBound($aCoord)]

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

    $hGui = GUICreate('Test', 220, 200)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_End')

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

    For $i = 0 To UBound($aCoord) - 1 ;wodurch bekommt hier $aCoord 0 bis 3?
    $ahButton[$i] = GUICtrlCreateButton($aCoord[$i][2], $aCoord[$i][0], $aCoord[$i][1], 80, 25)
    GUICtrlSetOnEvent(-1, '_Buttonpressed')
    Next

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

    GUISetState()
    While Sleep(100)
    WEnd
    Func _End()
    Exit
    EndFunc

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

    Func _Buttonpressed()
    ConsoleWrite(@GUI_CtrlId) ;Wieso gibt es hier die Rückgabewerte 3,4,5,6
    Local $iClick = @GUI_CtrlId - $ahButton[0]
    GUICtrlSetState($ahButton[$iClick], $GUI_DISABLE)
    MsgBox(0, 'Test', GUICtrlRead(@GUI_CtrlId) & ' wurde angeklickt')
    ConsoleWrite(GUICtrlRead(@GUI_CtrlId))
    EndFunc

    [/autoit]

    2 Mal editiert, zuletzt von m47 (25. Juni 2012 um 04:16)

  • Hallo, vielleicht kann mich jemand unterstützen den Code zu verbessern, also das Ergebniss passt nur wie es geschrieben ist gefällt mir ganz und gar nicht:)
    1.)Bei der 2ten Funktion erhalte ich eine control ID mit 67 und 68 und muss mit 66 subtrahieren damit ich auf meine gewünschten 1 bzw. 2 komme.
    2.)Darf ich $i überall verwenden oder stört das?
    3.)die 2 Regionen in eine Schleife

    Spoiler anzeigen
    [autoit]


    ;GUI Button_Input_Installation(1_bis_18)
    Global $_Input_Installation[19][2] = [[0,0],[24,45],[24,80],[24,115],[24,150],[134,45],[134,80],[134,115],[134,150],[134,185],[274,45],[274,80],[274,115],[274,150],[384,45],[384,80],[384,115],[384,150],[274,185]], $Input_Installation[UBound($_Input_Installation)]
    For $i = 1 To UBound($_Input_Installation) - 1
    $Input_Installation[$i] = GUICtrlCreateInput(IniRead("m47.ini", "Input_Installation"&$i, "Wert", ""), $_Input_Installation[$i][0], $_Input_Installation[$i][1], 95, 32)
    GUICtrlSetFont(-1, 14, 800, 0, "MS Sans Serif")
    GUICtrlSetOnEvent(-1, "Input_InstallationChange")
    Next

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

    ;2 GUI Buttons _Wechseln_Installationpfade: Beim drücken auf den Knopf sollen die Installationspfade ausgetauscht werden, beim nochmalige drücken zurücktauschen
    Global $_Button_Wechseln_Installation[3] = [0,16,376] , $Button_Wechseln_Installation[UBound($_Button_Wechseln_Installation)]
    For $i = 1 To UBound($_Button_Wechseln_Installation) - 1
    $Button_Wechseln_Installation[$i] = GUICtrlCreateButton("Wechseln", $_Button_Wechseln_Installation[$i], 190, 110, 27, $WS_GROUP)
    GUICtrlSetFont(-1, 14, 800, 0, "MS Sans Serif")
    If IniRead("m47.ini", "Button_Wechseln_Installation"&$i, "Wert", "") = 1 Then
    GUICtrlSetBkColor($Button_Wechseln_Installation[$i], 0xFF0000) ;Red1
    Else
    GUICtrlSetBkColor($Button_Wechseln_Installation[$i], 0xC0C0C0) ;Silver
    EndIf
    GUICtrlSetOnEvent(-1, "Button_Wechseln_Installation")
    Next

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

    ;TAB Installs
    Func Input_InstallationChange()
    $i = @GUI_CtrlId - $Input_Installation[1] + 1 ;hier klappt das ohne Zahl
    IniWrite("m47.ini", "Input_Installation"&$i, "Wert", GUICtrlRead($Input_Installation[$i]))
    BeepOK() ;
    EndFunc

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

    Func Button_Wechseln_Installation()
    #Region 1.)
    $i = @GUI_CtrlId - 66 ;mit 66 klappt es, wie bekomme ich das ohne der Zahl hin?
    ;consolewrite(@GUI_CtrlId&@LF&@LF)
    ;_ArrayDisplay($Button_Wechseln_Installation)
    If IniRead("m47.ini", "Button_Wechseln_Installation"&$i, "Wert", "") = 0 Then
    GUICtrlSetBkColor($Button_Wechseln_Installation[$i], 0xFF0000) ;Red1
    IniWrite("m47.ini", "Button_Wechseln_Installation"&$i, "Wert", "1")
    Else
    GUICtrlSetBkColor($Button_Wechseln_Installation[$i], 0xC0C0C0) ;Silver
    IniWrite("m47.ini", "Button_Wechseln_Installation"&$i, "Wert", "0")
    EndIf
    #Endregion 1.)

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

    #Region 3.)
    ;das möchte ich auch noch in eine Schleife packen
    ;Wenn Button1 Wert 0 dann dieses
    [[1,10],[2,11],[3,12],[4,13],[9,18],[10,1],[11,2],[12,3],[13,4],[18,9]]
    ;~ IniWrite("m47.ini", "Input_Installation1", "Wert", GUICtrlRead($Input_Installation[10]))
    ;~ IniWrite("m47.ini", "Input_Installation2", "Wert", GUICtrlRead($Input_Installation[11]))
    ;~ IniWrite("m47.ini", "Input_Installation3", "Wert", GUICtrlRead($Input_Installation[12]))
    ;~ IniWrite("m47.ini", "Input_Installation4", "Wert", GUICtrlRead($Input_Installation[13]))
    ;~ IniWrite("m47.ini", "Input_Installation9", "Wert", GUICtrlRead($Input_Installation[18]))
    ;~ IniWrite("m47.ini", "Input_Installation10", "Wert", GUICtrlRead($Input_Installation[1]))
    ;~ IniWrite("m47.ini", "Input_Installation11", "Wert", GUICtrlRead($Input_Installation[2]))
    ;~ IniWrite("m47.ini", "Input_Installation12", "Wert", GUICtrlRead($Input_Installation[3]))
    ;~ IniWrite("m47.ini", "Input_Installation13", "Wert", GUICtrlRead($Input_Installation[4]))
    ;~ IniWrite("m47.ini", "Input_Installation18", "Wert", GUICtrlRead($Input_Installation[9]))
    ;~ GUICtrlSetData($Input_Installation[1], IniRead("m47.ini", "Input_Installation1", "Wert", ""))
    ;~ GUICtrlSetData($Input_Installation[2], IniRead("m47.ini", "Input_Installation2", "Wert", ""))
    ;~ GUICtrlSetData($Input_Installation[3], IniRead("m47.ini", "Input_Installation3", "Wert", ""))
    ;~ GUICtrlSetData($Input_Installation[4], IniRead("m47.ini", "Input_Installation4", "Wert", ""))
    ;~ GUICtrlSetData($Input_Installation[9], IniRead("m47.ini", "Input_Installation9", "Wert", ""))
    ;~ GUICtrlSetData($Input_Installation[10], IniRead("m47.ini", "Input_Installation10", "Wert", ""))
    ;~ GUICtrlSetData($Input_Installation[11], IniRead("m47.ini", "Input_Installation11", "Wert", ""))
    ;~ GUICtrlSetData($Input_Installation[12], IniRead("m47.ini", "Input_Installation12", "Wert", ""))
    ;~ GUICtrlSetData($Input_Installation[13], IniRead("m47.ini", "Input_Installation13", "Wert", ""))
    ;~ GUICtrlSetData($Input_Installation[18], IniRead("m47.ini", "Input_Installation18", "Wert", ""))
    ;~ BeepOK() ;

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

    ;Wenn Button2 Wert 1 dann dieses
    [[5,14],[6,15],[7,16],[8,17],[14,5],[15,6],[16,7],[17,8]]
    ;~ IniWrite("m47.ini", "Input_Installation5", "Wert", GUICtrlRead($Input_Installation[14]))
    ;~ IniWrite("m47.ini", "Input_Installation6", "Wert", GUICtrlRead($Input_Installation[15]))
    ;~ IniWrite("m47.ini", "Input_Installation7", "Wert", GUICtrlRead($Input_Installation[16]))
    ;~ IniWrite("m47.ini", "Input_Installation8", "Wert", GUICtrlRead($Input_Installation[17]))
    ;~ IniWrite("m47.ini", "Input_Installation14", "Wert", GUICtrlRead($Input_Installation[5]))
    ;~ IniWrite("m47.ini", "Input_Installation15", "Wert", GUICtrlRead($Input_Installation[6]))
    ;~ IniWrite("m47.ini", "Input_Installation16", "Wert", GUICtrlRead($Input_Installation[7]))
    ;~ IniWrite("m47.ini", "Input_Installation17", "Wert", GUICtrlRead($Input_Installation[8]))
    ;~ GUICtrlSetData($Input_Installation[5], IniRead("m47.ini", "Input_Installation5", "Wert", ""))
    ;~ GUICtrlSetData($Input_Installation[6], IniRead("m47.ini", "Input_Installation6", "Wert", ""))
    ;~ GUICtrlSetData($Input_Installation[7], IniRead("m47.ini", "Input_Installation7", "Wert", ""))
    ;~ GUICtrlSetData($Input_Installation[8], IniRead("m47.ini", "Input_Installation8", "Wert", ""))
    ;~ GUICtrlSetData($Input_Installation[14], IniRead("m47.ini", "Input_Installation14", "Wert", ""))
    ;~ GUICtrlSetData($Input_Installation[15], IniRead("m47.ini", "Input_Installation15", "Wert", ""))
    ;~ GUICtrlSetData($Input_Installation[16], IniRead("m47.ini", "Input_Installation16", "Wert", ""))
    ;~ GUICtrlSetData($Input_Installation[17], IniRead("m47.ini", "Input_Installation17", "Wert", ""))
    ;~ BeepOK() ;
    EndFunc
    #Endregion 3.)

    [/autoit]

    meine Lösung zu 3.)

    Spoiler anzeigen
    [autoit]

    Func Button_Wechseln_Installation()
    $i = @GUI_CtrlId - 66
    If IniRead("m47.ini", "Button_Wechseln_Installation"&$i, "Wert", "") = 0 Then
    GUICtrlSetBkColor($Button_Wechseln_Installation[$i], 0xFF0000) ;Red1
    IniWrite("m47.ini", "Button_Wechseln_Installation"&$i, "Wert", "1")
    Else
    GUICtrlSetBkColor($Button_Wechseln_Installation[$i], 0xC0C0C0) ;Silver
    IniWrite("m47.ini", "Button_Wechseln_Installation"&$i, "Wert", "0")
    EndIf
    If $i = 1 then
    Global $_Button_Wechseln_Installation_1_bis_4_und_9[10][2] = [[1,10],[2,11],[3,12],[4,13],[9,18],[10,1],[11,2],[12,3],[13,4],[18,9]]
    For $i = 0 To UBound($_Button_Wechseln_Installation_1_bis_4_und_9) - 1
    IniWrite("m47.ini", "Input_Installation"&$_Button_Wechseln_Installation_1_bis_4_und_9[$i][0], "Wert", GUICtrlRead($Input_Installation[$_Button_Wechseln_Installation_1_bis_4_und_9[$i][1]]))
    Next
    Global $_Button_Wechseln_Installation_1_bis_4_und_9[10] = [1,2,3,4,9,10,11,12,13,18]
    For $i In $_Button_Wechseln_Installation_1_bis_4_und_9
    GUICtrlSetData($Input_Installation[$i], IniRead("m47.ini", "Input_Installation"&$i, "Wert", ""))
    Next
    Else
    Global $_Button_Wechseln_Installation_5_bis_8[8][2] = [[5,14],[6,15],[7,16],[8,17],[14,5],[15,6],[16,7],[17,8]]
    For $i = 0 To UBound($_Button_Wechseln_Installation_5_bis_8) - 1
    IniWrite("m47.ini", "Input_Installation"&$_Button_Wechseln_Installation_5_bis_8[$i][0], "Wert", GUICtrlRead($Input_Installation[$_Button_Wechseln_Installation_5_bis_8[$i][1]]))
    Next
    Global $_Button_Wechseln_Installation_5_bis_8[8] = [5,6,7,8,14,15,16,17]
    For $i In $_Button_Wechseln_Installation_5_bis_8
    GUICtrlSetData($Input_Installation[$i], IniRead("m47.ini", "Input_Installation"&$i, "Wert", ""))
    Next
    Endif
    BeepOK() ;
    EndFunc

    [/autoit]

    5 Mal editiert, zuletzt von m47 (25. Juni 2012 um 04:22)