Wie kann man mehrere GUIs in 1 Script packen?

  • Hallo Community,

    ich möchte für meinen VokabelTrainer eine GUI anfertigen, aber sie soll bei Case $VokabelTrainerStarten eine Gui aufrufen, nicht nur eine InputBox!
    Wie setze ich dies in die Tat um?

    Also:

    Man klickt den Button "Starte den Trainer" und prompt öffnet er eine Gui (in kurzform).
    Drückt man auf der GUI dann den Button Weiter, kommt die nächste gui usw...

    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal

  • Hallo.
    Du musst eine Funktion erstellen, und in diese Funktion schreibst du dein GUI, was auftauchen soll.
    Dann kannst du die Funktion aufrufen, und das GUI wird erzeugt.

    MfG. PrideRage

    Meine Projekte:
    ClipBoard Manager (beendet)
    Gutes ClipBoard Verwaltungs Programm mit nützlichen Funktionen.

    HTML Creator (beendet)
    Nützliches Tool um schnell ein eigenes HTML Dokument zu erstellen.

  • Hi EliteMatthias.

    Das geht zum Beispiel so:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    $hGUI = GUICreate("Erste GUI")
    $next = GUICtrlCreateButton("Weiter",100,100)

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

    GUISetState()

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

    WHile 1

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

    $msg = GUIGetMsg()

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

    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $next
    NextGUI()
    EndSwitch

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

    WEnd

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

    FUnc NextGUI()

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

    GUIDelete($hGUI)

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

    GUICreate("Zweite GUI")
    GUISetState()

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    ExitLoop
    EndSwitch
    WEnd

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

    EndFunc ;==> NextGUI()

    [/autoit]
  • Hallo EliteMattthias

    Man klickt den Button "Starte den Trainer" und prompt öffnet er eine Gui (in kurzform).
    Drückt man auf der GUI dann den Button Weiter, kommt die nächste gui usw...


    für dieses Vorhaben reicht eine einzige Gui, du musst nur auf beim Klicken des "Weiter"-Buttons mit GuiCtrlSetData die Frage austauschen, falls es Multiple-Choise wird auch noch die Auswahl an Antworten.
    Wie man eine Gui erstellt, kannst du dir anhand der Hilfe unter Inhalt|Gui Referenz erarbeiten/nachlesen. Auch mit Variablen speziell Arrays solltest du dich befassen.
    @Jautois hat im Forum Skripte einen Rechentrainer vorgestellt.
    Wenn es eine Art Multiple-Choice werden soll, dann schau dir [ offen ] QUIZ an, gibt aber sicher noch mehr, musst einfach einmal die SuFu bemühen,

    mfg (Auto)Bert

  • Hier mal ein beispiel.
    Hoffe es hiflt:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    $gui1 = GUICreate('GUI 1', 500, 300, 100, 100)
    $button1 = GUICtrlCreateButton('Aufruf GUI 2', 20, 20, 100, 21)
    $button4 = GUICtrlCreateButton('Aufruf GUI 3', 20, 70, 100, 21)

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

    $gui2 = GUICreate('GUI 2', 500, 300, 500, 500)
    $button2 = GUICtrlCreateButton('Zurück zu GUI 1', 20, 20, 100, 21)

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

    $gui3 = GUICreate('GUI 3', 500, 300, 540, 20)
    $button3 = GUICtrlCreateButton('Zurück zu GUI 1', 20, 20, 100, 21)

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

    GUISetState(@SW_SHOW, $gui1)

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

    While 1
    $msg = GUIGetMsg(1) ; Advanced GUIGetMsg()-Mode (s. Hilfe)
    Switch $msg[0] ; Ereignis
    Case $button1 ; aufruf gui 2
    GUISetState(@SW_SHOW, $gui2) ; 2tes GUI anzeigen
    GUISetState(@SW_HIDE, $gui1) ; 1tes verstecken
    Case $button4 ; aufruf gui 3
    GUISetState(@SW_SHOW, $gui3) ; 3tes GUI...
    GUISetState(@SW_HIDE, $gui1) ; ....
    Case $button2, $button3 ; zurück zu GUI 1 (button 2 ist auf GUI 2, und button 3 auf GUI 3)
    ContinueCase ; Einfach zum nächsten Punkt springen, da ja eh nur das fenster, von dem der Aufruf kam, versteckt wird.
    Case $GUI_EVENT_CLOSE
    If $msg[1] = $gui1 Then Exit ; Wenn das hauptfenster geschlossen wurde, das ganze programm beenden
    GUISetState(@SW_SHOW, $gui1) ; ansonsten wieder das Hauptfenster zeigen.
    GUISetState(@SW_HIDE, $msg[1]) ; und das andere verstecken
    EndSwitch
    WEnd

    [/autoit]