Gui mit mehreren "Seiten"

  • Guten Tag @ all
    Stehe vor einem kleinen problem,möchte eine Gui machen mit mehreren "Seiten"
    Also ich habe meine Hauptgui mit 3 Button
    Der eine heisst zurück der 2. Home und der 3.vor.
    und jetzt wollte ich frage ob ich 3Formen machen muss oder ob es auch geht wie mit der Tabfunktion

    Danke vorweg
    Gruß Detroit49

    2 Mal editiert, zuletzt von Detroit49 (14. März 2011 um 20:31)

  • hmm ihrgendwie geht das nicht
    wenn ich die form ins array setze erkennt das script die case nicht mehr

  • oh ja sry werde die sofort machen ^^
    Button der anderen Form´s noch nicht geschrieben !!
    Edit:

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Infotaiment", 622, 278, 192, 124)
    $Pic1 = GUICtrlCreatePic("C:\Users\Detroit49\Desktop\Sos49.jpg", 0, 0, 620, 276,$GUI_DISABLE)
    $Button1 = GUICtrlCreateButton("Software", 8, 8, 179, 49)
    GUICtrlSetFont(-1, 22, 400, 2, "Showcard Gothic")
    $Button2 = GUICtrlCreateButton("Games", 240, 8, 147, 49)
    GUICtrlSetFont(-1, 22, 400, 2, "Showcard Gothic")
    $Button3 = GUICtrlCreateButton("Internet", 440, 8, 171, 49)
    GUICtrlSetFont(-1, 22, 400, 2, "Showcard Gothic")
    GUISetState(@SW_SHOW)

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

    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    case $Button1
    _open()
    case $Button2
    _open2()
    case $Button3
    _open3()

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

    EndSwitch
    WEnd
    func _open()
    $Form1 = GUICreate(" Software", 622, 278, 192, 124)
    GUISetState(@SW_SHOW)
    EndFunc
    func _open2()
    $Form1 = GUICreate(" internet", 622, 278, 192, 124)
    GUISetState(@SW_SHOW)
    EndFunc
    func _open3()
    $Form1 = GUICreate("Games", 622, 278, 192, 124)
    GUISetState(@SW_SHOW)
    EndFunc

    [/autoit]
  • Keine Ahnung ob ich jetzt dich oder du mich falsch verstanden hast ...

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #region ### START Koda GUI section ### Form=
    Global $seite1[3], $seite2[3], $seite3[3], $current = 1, $max = 3
    $Form1 = GUICreate("Form1", 395, 159, 227, 148)
    $Button1 = GUICtrlCreateButton("zurück", 88, 104, 75, 25)
    $Button2 = GUICtrlCreateButton("home", 176, 104, 75, 25)
    $Button3 = GUICtrlCreateButton("vor", 264, 104, 75, 25)
    $seite1[0] = GUICtrlCreateLabel("$seite1", 24, 16, 36, 17)
    $seite1[1] = GUICtrlCreateLabel("$seite1", 104, 16, 36, 17)
    $seite1[2] = GUICtrlCreateLabel("$seite1", 184, 24, 36, 17)
    $seite2[0] = GUICtrlCreateLabel("$seite2", 24, 16, 36, 17)
    GUICtrlSetState(-1, $GUI_HIDE)
    $seite2[1] = GUICtrlCreateLabel("$seite2", 104, 16, 36, 17)
    GUICtrlSetState(-1, $GUI_HIDE)
    $seite2[2] = GUICtrlCreateLabel("$seite2", 184, 24, 36, 17)
    GUICtrlSetState(-1, $GUI_HIDE)
    $seite3[0] = GUICtrlCreateLabel("$seite3", 24, 16, 36, 17)
    GUICtrlSetState(-1, $GUI_HIDE)
    $seite3[1] = GUICtrlCreateLabel("$seite3", 104, 16, 36, 17)
    GUICtrlSetState(-1, $GUI_HIDE)
    $seite3[2] = GUICtrlCreateLabel("$seite3", 184, 24, 36, 17)
    GUICtrlSetState(-1, $GUI_HIDE)
    GUISetState(@SW_SHOW)
    #endregion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button3
    If $current < $max Then
    $aNext = _getNextControlArray()
    $aCurrent = _getCurrentControlArray()
    For $i = 0 To UBound($aCurrent) - 1
    GUICtrlSetState($aCurrent[$i], $GUI_HIDE)
    Next
    For $i = 0 To UBound($aNext) - 1
    GUICtrlSetState($aNext[$i], $GUI_SHOW)
    Next
    $current += 1
    EndIf
    Case $Button1
    If $current > 1 Then
    $aPrevious = _getPreviousControlArray()
    $aCurrent = _getCurrentControlArray()
    For $i = 0 To UBound($aCurrent) - 1
    GUICtrlSetState($aCurrent[$i], $GUI_HIDE)
    Next
    For $i = 0 To UBound($aPrevious) - 1
    GUICtrlSetState($aPrevious[$i], $GUI_SHOW)
    Next
    $current -= 1
    EndIf
    EndSwitch
    WEnd

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

    Func _getNextControlArray()
    $aNext = Eval("seite" & $current + 1)
    Return $aNext
    EndFunc ;==>_getNextControlArray

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

    Func _getCurrentControlArray()
    $aCurrent = Eval("seite" & $current)
    Return $aCurrent
    EndFunc ;==>_getCurrentControlArray

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

    Func _getPreviousControlArray()
    $aPrevious = Eval("seite" & $current - 1)
    Return $aPrevious
    EndFunc ;==>_getPreviousControlArray

    [/autoit]


    Fehlt noch etwas Feintuning an den Buttons (disablen wenn nicht benutzbar).

  • :whistling::whistling::whistling:

    Danke

    aber geht nicht so wie ich mit das dachte ^^
    Was ich mach möchte ist
    das ich eine oberflaschen habe mit unter seiten
    z.b wie eine browserseite
    bsp.
    Google.de ->suchebefriff = ergebniss klicke auf zurück =Google.de
    nur das in einer gui

    Einmal editiert, zuletzt von Detroit49 (14. März 2011 um 20:29)

  • hm... ich hab auch viele meiner guis mit mehreren seiten ausgestattet, zunächst einmal mit arrays, mittlerweile aber mit dictionnaries / objects (mithilfe einer UDF).
    du kannst zunächst einmal selbst versuchen, das mit einem array zu lösen, jedoch würde ich dann den OnEvent-Modus verwenden, dann hast du keine schwierigkeiten mit dem select...
    wenn du möchstes, kann ich dir meinen code hier posten, den ich immer wiederverwende?
    ...versuchs aber erst mal selbst ;)

    viele grüße,
    r4lf

  • Zitat

    Was ich mach möchte ist
    das ich eine oberflaschen habe mit unter seiten
    z.b wie eine browserseite
    bsp.
    Google.de ->suchebefriff = ergebniss klicke auf zurück =Google.de
    nur das in einer gui


    Ist doch vom Prinzip her das selbe.
    Das da oben ist nur ein Beispiel mit einer möglichen
    Umsetzung. Ob da nun vor und zurück geblättert wird
    oder nur bestimmte Buttons ein Control Array einblenden...
    Alles das selbe. Musst es halt nur in dein Skript einbinden.
    Wenn ich dein Beispiel GUI sehe, dann musst du theoretisch
    nur jedes Control Array mit einer Funktion an seinen Button binden
    und in eine Variable setzen, die ständig die aktuell letzte Seite
    speichert (für den "zurück" Button).

    Zitat

    jedoch würde ich dann den OnEvent-Modus verwenden, dann hast du keine schwierigkeiten mit dem select...


    Ich seh da kein Problem. Wie gesagt, das da oben ist lediglich ein Beispiel. Die Vorgänge könnte man ohne weiteres in 4-5 Funktionen auslagern und beliebig viele Seiten damit generieren und ansteuern. Dict.Object bietet sich natürlich an, man muss es nur kennen und mögen.

  • Zitat

    das ich eine oberflaschen habe mit unter seiten
    z.b wie eine browserseite


    Wären Tabs keine LÖsung?

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

  • guck mal, hier die Funktionen, die ich für die Seitenansicht benutze:

    Spoiler anzeigen
    [autoit]

    ;_GUIPage.au3
    #include "objDictionary.au3"
    #include-once
    ; GUI Page UDF UDF by r4lf from autoit.de for http://www.autoit.de/index.php?page=Thread&threadID=26219

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

    Global $pageDict=_ObjDictCreate(1)

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

    Func GUIShowPage($page)
    Global $pageDict

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

    For $key In _ObjDictGetKeys($pageDict)
    If $key <> $page Then
    For $guielement In _ObjDictGetValue($pageDict,$key)
    GUICtrlSetState($guielement,$GUI_HIDE)
    Next
    EndIf
    Next
    If _ObjDictSearch($pageDict,$page) Then
    For $guielement In _ObjDictGetValue($pageDict,$page)
    GUICtrlSetState($guielement,$GUI_SHOW)
    Next
    EndIf
    EndFunc

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

    Func GUICtrlSetPage($guielement,$page="page1")
    Global $pageDict
    If _ObjDictSearch($pageDict, $page) Then
    _ObjDictArrayAdd($pageDict,$page,$guielement)
    Else
    Dim $apage[1]=[$guielement]
    _ObjDictAdd($pageDict,$page,$apage)
    EndIf
    EndFunc

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

    ;############ internal only:

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

    Func _ObjDictArrayAdd($dict,$key,$addvalue)
    $a=_ObjDictGetValue($dict,$key)
    If IsArray($a) Then
    _ArrayAdd($a,$addvalue)
    _ObjDictSetValue($dict,$key,$a)
    Return 1
    EndIf
    Return -1 ;no array if error
    EndFunc

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

    Func _ObjDictGetKeys($dict)
    Return $dict.keys
    EndFunc

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

    was du dafür brauchst, ist das die "objDictionary"-UDF, ich weiß nicht mehr wo ich die her hab... evtl kann ich die dir per pm schicken, wenn du sie nicht mehr findest?

    Benutzung meiner UDF:

    [autoit]


    $bla=GUICreate(...)
    ;SEITE 1:
    $button1=GUICtrlCreateButton(...)
    GUICtrlSetPage($button1,"seite1") ;leider kann man kein "GUICtrlSetPage(-1,"seite1")" benutzen...
    ;wenn jemand weiß wie das geht -> PM! ;)
    $button2=GUICtrlCreateButton(...)
    GUICtrlSetPage($button2,"seite1")

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

    ;SEITE2:
    $label=GUICtrlCreateLabel(...)
    GUICtrlSetPage($label,"seite2")

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

    GUIShowPage("seite1") ;-> UDF

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

    GUISetState(@SW_SHOW)

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

    Alles klar? ;)

    grüße, r4lf

    PS: dazu musst du den OnEvent-Mode von Autoit benutzen....guck mal in der Hilfe...

    Edit: objDictionary ist von BugFix hier aus dem Forum und findest du hier:
    UDF-Sammlung: Objekt Dictionary
    [Achtung, kleiner Typo, BugFix schreibt objDicTOnary ohne i.... ;) ]