Button

  • Hallo,

    ich habe eine Frage bezüglich Buttons.
    Ist es möglich mit einem Button einen Button zu
    erstellen und diesen dann zu benutzen?
    Ich habe mal angefangen mit ein bisschen Code, mein
    Problem ist nur, ich kann einen Button erstellen ihn aber nicht
    ansprechen da er ja immer mit der gleichen Variable erstellt wird.

    Spoiler anzeigen
    [autoit]

    GUICreate("GSD",310,300) ; Erstellt die Gui
    GUISetState(@SW_SHOW) ; Macht die Gui sichtbar

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

    $x = 10
    $y = 30

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

    ; Die Schleife wiederholt sich, bis der Benutzer die Beenden-Aktion der GUI auslöst

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

    $Button_1 = GUICtrlCreateButton("New File", $x, $y, 100)
    $btn_Exit = GUICtrlCreateButton("Exit", 200, $y, 100)

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

    Func NewButton_N()
    $y = $y + 30
    $Button2 = GUICtrlCreateButton("...", $x, $y, 100)
    EndFunc

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

    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $Button_1
    NewButton_N()
    Case $msg = $btn_Exit
    Exit
    EndSelect
    WEnd

    [/autoit]

    Danke schonmal für eure Hilfe :)

    Einmal editiert, zuletzt von whoami (18. September 2014 um 15:31)

  • (Fast) alles ist möglich. Das hier auf jeden Fall. Nur ist es unter umständen garnicht sinnvoll so zu arbeiten.
    Was genau hast du denn vor?

    Meistens ist es intelligenter alle buttons am Anfang des Scriptes zu erstellen und auszublenden. Wenn er dann benötigt wird muss er einfach nur angezeigt werden

    • Offizieller Beitrag

    Im OnEventMode ist Dein Vorhaben leicht umzusetzen:

    Spoiler anzeigen
    [autoit]


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

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

    GUICreate("GSD",310,300) ; Erstellt die Gui
    GUISetOnEvent($GUI_EVENT_CLOSE, '_End')
    GUISetState(@SW_SHOW) ; Macht die Gui sichtbar

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

    Global $x = 10, $y = 30
    Global $aidButton[1], $iButtonCount = 0

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

    GUICtrlCreateButton("New Button", $x, $y, 100)
    GUICtrlSetOnEvent(-1, '_NewButton')
    GUICtrlCreateButton("Exit", 200, $y, 100)
    GUICtrlSetOnEvent(-1, '_End')

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

    While Sleep(1000)
    WEnd

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

    Func _End()
    Exit
    EndFunc

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

    Func _NewButton()
    $y = $y + 30
    $aidButton[$iButtonCount] = GUICtrlCreateButton(Chr($iButtonCount + 65), $x, $y, 100)
    GUICtrlSetOnEvent(-1, '_ButtonClick')
    $iButtonCount += 1
    ReDim $aidButton[$iButtonCount + 1]
    EndFunc

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

    Func _ButtonClick()
    ConsoleWrite('Button = ' & GUICtrlRead(@GUI_CtrlId) & @CR)
    EndFunc

    [/autoit]
  • EDIT: Damit geklärt lol:D

    Wie schnitzel schon sagt es ist eigentlich unsinnig so zu arbeiten aber hier trotzdem wie es funktionieren könnte..

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>

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

    main()
    Func main()
    Local $x = 10, $y = 10
    Dim $addbutton[10]

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

    GUICreate("GSD", 310, 315) ; Erstellt die Gui
    GUISetState() ; Macht die Gui sichtbar

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

    $new = GUICtrlCreateButton("New File", $x, $y, 100)
    $close = GUICtrlCreateButton("Exit", 210-$x, $y, 100)

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

    While 1
    $msg = GUIGetMsg()
    If $msg = $close Or $msg = -3 Then
    Exit
    ElseIf $msg = $new Then
    $y += 30
    If $y < 310 Then $addbutton[($y-10)/30] = GUICtrlCreateButton("...", $x, $y, 100)
    ElseIf $msg = $addbutton[1] And $addbutton[1] <> 0 Then
    MsgBox(0, "", "Button 1 gedrückt!")
    EndIf
    WEnd
    EndFunc

    [/autoit]
    Spoiler anzeigen


    Die andere variante die schnitzel anspricht kann man zb so machen:

    [autoit]


    #include <GUIConstants.au3>

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

    main()
    Func main()
    Local $x = 10, $y = 10, $shown = 1
    Dim $addbutton[10]

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

    GUICreate("GSD", 310, 315) ; Erstellt die Gui
    GUISetState() ; Macht die Gui sichtbar

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

    $show = GUICtrlCreateButton("New File", $x, $y, 100)
    $close = GUICtrlCreateButton("Exit", 210-$x, $y, 100)
    For $i = 1 To 9
    $y += 30
    $addbutton[$i] = GUICtrlCreateButton("...", $x, $y, 100)
    GUICtrlSetState($addbutton[$i], $GUI_HIDE)
    Next

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

    While 1
    $msg = GUIGetMsg()
    If $msg = $close Or $msg = -3 Then
    Exit
    ElseIf $msg = $show Then
    If $shown < 10 Then
    GUICtrlSetState($addbutton[$shown], $GUI_SHOW)
    $shown += 1
    EndIf
    ElseIf $msg = $addbutton[1] Then
    MsgBox(0, "", "Button 1 gedrückt!")
    EndIf
    WEnd
    EndFunc

    [/autoit]

    Lg Phil-IT

  • Vielleicht ist es einfacher, einfach vorher einen unsichtbaren Button zu erstellen, der dann einfach nur "visible" geschaltet wird?


    Die Möglichkeit wurde bereits in Post #2 genannt und in Post #5 ist ein Beispiel^^