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

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

    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]