GUI - Mehrere Forms

  • Hallo,

    zunächst: bin ziemlich neu und kenne mich mit AutoIt noch nciht so gut aus, also habt Geduld mit mir. Habe mir mal den Koda GUI Builder runtergeladen und soweit ist alles in Ordnung und klar, Nur ist mir nicht wirklich klar wie ich mehrere Forms mit einem "Main Menu" einbauen kann. Man hat quasi ein Dropdownmenü und für jeden Punkt gibt es eine eigene Seite. Muss man dann einfach alles auf eine Seite machen und bei einem Untermenüklick alle Buttons etc, die nicht zu der bestimmten Seite gehören, unsichtbar machen?

    Bei einem neuen Form erstellt ja quasi ein neues au3 Dokument. Oder kann ich das irgendwie includen? Wäre ja auch irgendwie ganz komisch, wenn man viele Elemente reduntant machen müsste. Oder packt man alles ein Dokument und fragt die dementsprechenden Seiten mit 'ner switch-Abzweigung ab? Wäre über ein paar Tips dankbar!

    Vielen Dank

  • Morgen!
    Also, du kannst nicht so einfach mehrere GUI´s durch eine Menüleiste steuern... Es ist zwar möglich, aber eher über Umwege. Was du aber machen kannst, ist eine GUI erstellen und darin mit einem Tab arbeiten - das hat den Vorteil das du nicht selber iwelche Buttons verstecken mußt, sondern bei einem Tab-Klick wird eben die Seite umgeschaltet.

    Grüsse!

    [EDIT]
    Eine neue Form.... Du kannst jede Form einfach in dein Script einbinden! Das ist überhaupt kein Problem. Und abfragen kannst du die Form 'Elemente' durch eine einfache Case/Switch Schleife oder durch die Option 'Opt("GUIOnEventMode", 1)'.

  • Simples Beispiel zum ein- und ausblenden von Controls.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    #region - GUI Create
    GUICreate("", 400, 400, -1, -1)
    $idCombo = GUICtrlCreateCombo("eins", 4, 4)
    GUICtrlSetData(-1, "zwei")
    GUICtrlSetData(-1, "drei")
    #endregion - GUI Create
    GUISetState(@SW_SHOW)

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

    _createControls()

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

    #region - GUI SelectLoop
    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = -3 ;$GUI_EVENT_CLOSE
    Exit
    Case $msg = $idCombo
    Select
    Case GUICtrlRead($idCombo) = "eins"
    For $i = 0 To UBound($aEins) - 1
    GUICtrlSetState($aEins[$i], $GUI_SHOW)
    Next
    For $i = 0 To UBound($aZwei) - 1
    GUICtrlSetState($aZwei[$i], $GUI_HIDE)
    Next
    For $i = 0 To UBound($aDrei) - 1
    GUICtrlSetState($aDrei[$i], $GUI_HIDE)
    Next
    Case GUICtrlRead($idCombo) = "zwei"
    For $i = 0 To UBound($aEins) - 1
    GUICtrlSetState($aEins[$i], $GUI_HIDE)
    Next
    For $i = 0 To UBound($aZwei) - 1
    GUICtrlSetState($aZwei[$i], $GUI_SHOW)
    Next
    For $i = 0 To UBound($aDrei) - 1
    GUICtrlSetState($aDrei[$i], $GUI_HIDE)
    Next
    Case GUICtrlRead($idCombo) = "drei"
    For $i = 0 To UBound($aEins) - 1
    GUICtrlSetState($aEins[$i], $GUI_HIDE)
    Next
    For $i = 0 To UBound($aZwei) - 1
    GUICtrlSetState($aZwei[$i], $GUI_HIDE)
    Next
    For $i = 0 To UBound($aDrei) - 1
    GUICtrlSetState($aDrei[$i], $GUI_SHOW)
    Next
    EndSelect
    EndSelect
    WEnd
    #endregion - GUI SelectLoop

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

    Func _createControls()
    Global $aEins[2], $aZwei[2], $aDrei[2]
    $aEins[0] = GUICtrlCreateButton("eins", 4, 40)
    $aEins[1] = GUICtrlCreateInput("eins", 4, 80)
    $aZwei[0] = GUICtrlCreateButton("zwei", 4, 40)
    GUICtrlSetState(-1, $GUI_HIDE)
    $aZwei[1] = GUICtrlCreateInput("zwei", 4, 80)
    GUICtrlSetState(-1, $GUI_HIDE)
    $aDrei[0] = GUICtrlCreateButton("drei", 4, 40)
    GUICtrlSetState(-1, $GUI_HIDE)
    $aDrei[1] = GUICtrlCreateInput("drei", 4, 80)
    GUICtrlSetState(-1, $GUI_HIDE)
    EndFunc ;==>_createControls

    [/autoit]
  • Hi,
    ich hatte auch mal danach gesucht und fand diese Lösung am Besten, da die GUIs mit all Ihren Controls usw auf einmal hidden bzw shown werden können:

    Spoiler anzeigen
    [autoit]

    $hParent = GUICreate("",500,500)
    $hBtn = GUICtrlCreateButton("Zeige mir alle Inputboxen!",0,0,500,40)
    GUISetState()

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

    $hChild = GUICreate("",500,400, 0, 100, 0x40000000, -1, $hParent)
    For $i = 0 To 10
    GUICtrlCreateInput("",0,20*$i,500,20)
    Next
    GUISetState(@SW_HIDE)

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

    Do
    $nMsg = GUIGetMsg()
    Select
    Case $nMsg = $hBtn
    GUISetState(@SW_SHOW,$hChild)
    EndSelect
    Until $nMsg = -3

    [/autoit]

    LG OIS

  • @oispnr Danke, das funktioniert ganz gut. Ich weiß nur nicht ob es so performant ist alles zu erstellen, was evtl mal angezeigt werden soll. Das verstecken macht es ja nur unsichtbar, hält es aber alles im Speicher. Nungut, vlt nimmt es ja nicht so viele Resourcen weg.
    Danke jedenfalls!

  • Also da bin ich jetzt ehrlich gesagt nicht der Experte, aber ich denke da solltest du dir keine Gedanken machen. Eine Alternative wäre zB. eine eigene Funktion zu schreiben, die _Gui1Create() oder so nennen und noch eine, die _Gui1Delete() heißt oder so, dann könntest du es auch leicht hinkriegen und würdest dann auch komplett löschen.
    Aber ich denke von der Performance ist meine Variante besser, da du hier alles am Anfang erstellst und später nur sagst: versteck, zeig. Andernfalls muss es ja jedesmal gelöscht werden und neu erstellt werden und so...

    LG OIS