Formularinhalt per Schaltfläche ändern

  • Hallo Leute.

    Ich möchte gerne in einem angezeigten Formular per Tastendruck den Inhalt ändern. So eine Art Seitenwechsel. Also per Klick auf ein Button sollen weitere bzw. andere Schaltflächen angezeigt werden und per anderer Taste wieder die von der ersten Seite.

    Wie kann ich sowas realisieren?

  • Das wird bei 20 Schaltflächen aber etwas mühsam. Außerdem möchte ich ja 2 komplett verschiedene Oberflächen.
    Also nicht nur Buttons austauschen. Auch Grafiken, Eingabefelder, etc.

  • Könnte vielleicht so gehen:
    1 MainGUI: $MAinGUI = GUICreate("Dialog",400,300)
    ChildGUIs jeweils: GUICtreate("Child",400,300,0,0,$WS_POPUP+$WS_CHILD,$WS_EX_MDICHILD,$MAinGUI)
    und dann mit GUISetste Show/Hide jeweils die Child-GUIs ein-und ausblenden. Das huptfenster bleibt dann immer an der gleichen Stelle :)
    Vllt braucht man noch _WinPAI_Setparent

  • mach ich sonst in der Ausfürlichkeit eigentlich nicht, aber das hatte ich gerade rumliegen :)

    ich denke darauf kann man aufbauen...

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    #include <GuiConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GUIConstants.au3>

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

    Opt("MustDeclareVars", 1)
    Opt("GUIOnEventMode", 1)
    Const $main_gui_width = 860
    Const $main_gui_height = 710
    Const $child_gui_width = 860
    Const $child_gui_height = 660
    Const $btn_bkcol = 0xd4d0c8
    Const $btn_col = 0x000000
    Const $btn_bkcol_a = 0x0a246a
    Const $btn_col_a = 0xffffff
    Global $title = "Demo für Child-Fenster"
    Global $dummy=GUICtrlCreateLabel("",0,0,1,1)
    Global $main_gui = GuiCreate($title, $main_gui_width, $main_gui_height, -1, -1, BitOr($WS_OVERLAPPEDWINDOW, $WS_CLIPSIBLINGS))
    Global $child1_gui, $child2_gui, $child3_gui, $child4_gui, $child5_gui, $child_akt, $child_old
    Global $btn_child1=GUICtrlCreateButton("Button 1", 10,0,160,30)
    GUICtrlSetFont(-1,10,300)
    GUICtrlSetOnEvent(-1, "child_show")
    Global $btn_child2=GUICtrlCreateButton("Button 2",180,0,160,30)
    GUICtrlSetFont(-1,10,300)
    GUICtrlSetOnEvent(-1, "child_show")
    Global $btn_child3=GUICtrlCreateButton("Button 3",350,0,160,30)
    GUICtrlSetFont(-1,10,300)
    GUICtrlSetOnEvent(-1, "child_show")
    Global $btn_child4=GUICtrlCreateButton("Button 4",520,0,160,30)
    GUICtrlSetFont(-1,10,300)
    GUICtrlSetOnEvent(-1, "child_show")
    Global $btn_child5=GUICtrlCreateButton("Button 5",690,0,160,30)
    GUICtrlSetFont(-1,10,300)
    GUICtrlSetOnEvent(-1, "child_show")

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

    GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")

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

    child1_gui()
    child2_gui()
    child3_gui()
    child4_gui()
    child5_gui()

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

    $child_akt = $child1_gui ; um letzten aktiven Button wieder neutral zu färben
    GUICtrlSetBkColor($btn_child1,$btn_bkcol_a)
    GUICtrlSetColor($btn_child1,$btn_col_a)
    GUICtrlSetState($dummy,$GUI_FOCUS)
    GuiSetState(@SW_SHOW,$main_gui)
    GuiSetState(@SW_SHOW,$child1_gui)

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

    While 1
    Sleep(1)
    WEnd

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

    Func child_show()
    $child_old = $child_akt
    Switch @GUI_CtrlId
    Case $btn_child1
    If $child_akt <> $child1_gui Then
    GuiSetState(@SW_HIDE,$child_akt)
    GuiSetState(@SW_SHOW,$child1_gui)
    $child_akt = $child1_gui
    GUICtrlSetBkColor($btn_child1,$btn_bkcol_a)
    GUICtrlSetColor($btn_child1,$btn_col_a)
    GUICtrlSetState($dummy,$GUI_FOCUS)
    EndIf
    Case @GUI_CtrlId = $btn_child2
    If $child_akt <> $child2_gui Then
    GuiSetState(@SW_HIDE,$child_akt)
    GuiSetState(@SW_SHOW,$child2_gui)
    $child_akt = $child2_gui
    GUICtrlSetBkColor($btn_child2,$btn_bkcol_a)
    GUICtrlSetColor($btn_child2,$btn_col_a)
    GUICtrlSetState($dummy,$GUI_FOCUS)
    EndIf
    Case $btn_child3
    If $child_akt <> $child3_gui Then
    GuiSetState(@SW_HIDE,$child_akt)
    GuiSetState(@SW_SHOW,$child3_gui)
    $child_akt = $child3_gui
    GUICtrlSetBkColor($btn_child3,$btn_bkcol_a)
    GUICtrlSetColor($btn_child3,$btn_col_a)
    GUICtrlSetState($dummy,$GUI_FOCUS)
    EndIf
    Case $btn_child4
    If $child_akt <> $child4_gui Then
    GuiSetState(@SW_HIDE,$child_akt)
    GuiSetState(@SW_SHOW,$child4_gui)
    $child_akt = $child4_gui
    GUICtrlSetBkColor($btn_child4,$btn_bkcol_a)
    GUICtrlSetColor($btn_child4,$btn_col_a)
    GUICtrlSetState($dummy,$GUI_FOCUS)
    EndIf
    Case $btn_child5
    If $child_akt <> $child5_gui Then
    GuiSetState(@SW_HIDE,$child_akt)
    GuiSetState(@SW_SHOW,$child5_gui)
    $child_akt = $child5_gui
    GUICtrlSetBkColor($btn_child5,$btn_bkcol_a)
    GUICtrlSetColor($btn_child5,$btn_col_a)
    GUICtrlSetState($dummy,$GUI_FOCUS)
    EndIf
    EndSwitch
    If $child_old <> $child_akt Then
    Switch $child_old
    Case $child1_gui
    GUICtrlSetBkColor($btn_child1,$btn_bkcol)
    GUICtrlSetColor($btn_child1,$btn_col)
    Case $child2_gui
    GUICtrlSetBkColor($btn_child2,$btn_bkcol)
    GUICtrlSetColor($btn_child2,$btn_col)
    Case $child3_gui
    GUICtrlSetBkColor($btn_child3,$btn_bkcol)
    GUICtrlSetColor($btn_child3,$btn_col)
    Case $child4_gui
    GUICtrlSetBkColor($btn_child4,$btn_bkcol)
    GUICtrlSetColor($btn_child4,$btn_col)
    Case $child5_gui
    GUICtrlSetBkColor($btn_child5,$btn_bkcol)
    GUICtrlSetColor($btn_child5,$btn_col)
    EndSwitch
    EndIf

    EndFunc
    Func child1_gui()
    $child1_gui = GUICreate("", $child_gui_width, $child_gui_height, 0, 10, BitOR($WS_CHILD, $WS_TABSTOP), $WS_EX_CONTROLPARENT, $main_gui)
    GuiCtrlCreateLabel("Dies ist Seite 1",50,200,200,30)
    GuiCtrlSetFont(-1,12,600)
    GuiSetState(@SW_HIDE,$child1_gui)
    EndFunc
    Func child2_gui()
    $child2_gui = GUICreate("", $child_gui_width, $child_gui_height, 0, 10, BitOR($WS_CHILD, $WS_TABSTOP), $WS_EX_CONTROLPARENT, $main_gui)
    GuiCtrlCreateLabel("Dies ist Seite 2",50,200,200,30)
    GuiCtrlSetFont(-1,12,600)
    GuiSetState(@SW_HIDE,$child2_gui)
    EndFunc
    Func child3_gui()
    $child3_gui = GUICreate("", $child_gui_width, $child_gui_height, 0, 10, BitOR($WS_CHILD, $WS_TABSTOP), $WS_EX_CONTROLPARENT, $main_gui)
    GuiCtrlCreateLabel("Dies ist Seite 3",50,200,200,30)
    GuiCtrlSetFont(-1,12,600)
    GuiSetState(@SW_HIDE,$child3_gui)
    EndFunc
    Func child4_gui()
    $child4_gui = GUICreate("", $child_gui_width, $child_gui_height, 0, 10, BitOR($WS_CHILD, $WS_TABSTOP), $WS_EX_CONTROLPARENT, $main_gui)
    GuiCtrlCreateLabel("Dies ist Seite 4",50,200,200,30)
    GuiCtrlSetFont(-1,12,600)
    GuiSetState(@SW_HIDE,$child4_gui)
    EndFunc
    Func child5_gui()
    $child5_gui = GUICreate("", $child_gui_width, $child_gui_height, 0, 10, BitOR($WS_CHILD, $WS_TABSTOP), $WS_EX_CONTROLPARENT, $main_gui)
    GuiCtrlCreateLabel("Dies ist Seite 5",50,200,200,30)
    GuiCtrlSetFont(-1,12,600)
    GuiSetState(@SW_HIDE,$child5_gui)
    EndFunc

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

    Func CLOSEClicked()
    Exit 0
    EndFunc

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

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    über mich...

    ich habe meine Erfahrungen hauptsächlich gesammelt in (grobe Übersicht):

    - RibbonBar Automation
    - MySQL Nutzung
    - GUIs in vielerlei Ausprägung
    - Nutzung von Powershell / Batch in AutoIt
    - Windows Automatisierung

    außerhalb von AutoIt:

    - Sprachen: PS, Batch, php, html(5), javascript, (perl eingeschränkt), vbs
    - Powershell (AD, WPF inkl. Multi-Threading, ...)
    - Deployment-Automatisierung ohne SCCM
    - Office-Nutzung mit COM-Object (AutoIt, PowerShell)
    - ActiveDirectory und alles was damit zusammenhängt
    - Hyper-V Clustering (Converged / Hyper Converged)
    - Serverhardware (Konfiguration, Aufbau, Architektur, Betrieb)

    Lieblingsthema:

    günstige Automatisierung von Vorgängen, für die andere Firmen viel Geld nehmen

    more to come ...

    Einmal editiert, zuletzt von Schnuffel (27. Mai 2008 um 15:22)

  • Wenn die Reihenfolge beliebig ist, würde ich so was machen:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <WindowsConstants.au3>

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

    #region - GUI Create
    Global $ChildGUIS[2]
    $MAinGUI = GUICreate("Dialog",400,300)
    GUISetState()

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

    ; 1. ChildGUI
    $ChildGUIS[0] = GUICreate("Child",400,300,0,0,$WS_CHILD,0,$MAinGUI)
    $go = GUICtrlCreateButton("GO",10,10)

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

    ; 2. ChildGUI
    $ChildGUIS[1] = GUICreate("Child",400,300,0,0,$WS_CHILD,0,$MAinGUI)
    GUICtrlCreatePic(@SystemDir & "\oemlogo.bmp",0,0,400,300,0)
    $b2 = GUICtrlCreateButton("GOsdsd",10,10)
    #endregion

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

    _GuiToggle(0)
    #region - GUI SelectLoop
    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    Case $msg = $go
    _GuiToggle(1)
    Case $msg = $b2
    _GuiToggle(0)
    EndSelect
    WEnd
    #endregion

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

    ; $Type: 1=Index in ChildArray, 0= GUIHandle
    Func _GuiToggle($NewGuI,$Type=1)
    For $i = 0 To UBound($ChildGUIS)-1
    GUISetState(@SW_HIDE,$ChildGUIS[$i])
    Next
    If IsHWnd($NewGuI) And $Type = 0 Then
    Return GUISetState(@SW_SHOW,$NewGuI)
    ElseIf UBound($ChildGUIS) <= $NewGuI Then
    Return 0
    Else
    Return GUISetState(@SW_SHOW,$ChildGUIS[$NewGuI])
    EndIf
    EndFunc

    [/autoit]