Brauche Hilfe bei meinem Help fenster (GUI)

  • Hi, erstmal ...

    Also ich habe folgendes Problem:

    Ich habe in mein "main" fenster ein button eingebaut namens "Help", jetzt will ich, dass wenn man auf den button klick, das main fenster ausgeblendet wird und auf dessen stelle ein help fenster eingeblendet (wenn noch nicht erstellt, dann zunächst erstellt) wird. Das klappt zunächst...wenn ich im help fenster auf den button "back" klicke soll er mir das help fenster ausblenden und an dessen stelle das main fenster wieder einblenden. das funzt auch noch soweit, klicke ich nun aber wieder auf den button help...passiert nichts mehr
    ?( kann wer bitte helfen ?

    hier mein source code:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    Dim $j_h, $help_form, $test_form
    Dim $win_posi[4]

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

    _main_gui()

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

    ;------------------
    Func _main_gui() ;das main window
    _win_res_act()

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

    $test_form = GUICreate("Test", 259, 282, $win_posi[0], $win_posi[1])
    ;$sql_form = GUICreate("Test", 259, 282, 188, 121) ;main window
    GUISetIcon("C:\...\GUI\icon\icon.ico")
    GUISetCursor (3)
    GUISetBkColor(0xD8E4F8)
    $test_label_main = GUICtrlCreateLabel("Test", 32, 8, 190, 38) ;Help_label
    GUICtrlSetFont(-1, 26, 800, 0, "Electrox ")
    GUICtrlSetColor(-1, 0x808080)
    GUICtrlSetCursor (-1, 3)
    $strich_black_t_main = GUICtrlCreateLabel("_____________________________________", 6, 45, 226, 1) ;Strich_oben
    GUICtrlSetBkColor(-1, 0x000000)
    GUICtrlSetCursor (-1, 3)
    $strich_black_b_main = GUICtrlCreateLabel("_____________________________________", 6, 239, 226, 1) ;Strich unten
    GUICtrlSetFont(-1, 1, 400, 0, "MS Sans Serif")
    GUICtrlSetBkColor(-1, 0x000000)
    GUICtrlSetCursor (-1, 3)
    $copyright_label_main = GUICtrlCreateLabel("© by Karroffel, 2008", 40, 248, 166, 27) ;(c) by Karroffel, 2008
    GUICtrlSetFont(-1, 16, 400, 0, "Polo Brush MF")
    GUICtrlSetCursor (-1, 3)
    $start_button_main = GUICtrlCreateButton("Start", 56, 168, 141, 29, 0) ;Button Start
    GUICtrlSetBkColor(-1, 0xA6CAF0)
    GUICtrlSetCursor (-1, 3)
    $about_button_main = GUICtrlCreateButton("About", 92, 208, 65, 25, 0) ;Button About
    GUICtrlSetBkColor(-1, 0xA6CAF0)
    GUICtrlSetCursor (-1, 3)
    $help_button_main = GUICtrlCreateButton("Help", 16, 208, 65, 25, 0) ;Button Help
    GUICtrlSetBkColor(-1, 0xA6CAF0)
    GUICtrlSetCursor (-1, 3)
    $exit_button_main = GUICtrlCreateButton("Exit", 168, 208, 65, 25, 0) ;Button Exit
    GUICtrlSetBkColor(-1, 0xA6CAF0)
    GUICtrlSetCursor (-1, 3)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $exit_button_main
    Exit
    ;Case $start_button_main
    ; _main()
    Case $help_button_main
    _help_win_da()
    ;Case $about_button_main
    ; _about()
    EndSwitch
    WEnd

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

    EndFunc

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

    Func _main() ;hier kommt das eig. prog rein
    ;
    EndFunc
    ;------------------

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

    ;------HELP-START------
    Func _help_win_da() ;prueft ob schon ein help window erzeugt wurde, wenn ja dann switch, wenn nicht dann erstellen...
    If $j_h = 1 Then
    _switch_help()
    Else
    _help()
    EndIf
    EndFunc

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

    Func _help() ;erstellt help window
    _win_res_act()
    GUISetState(@SW_HIDE)

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

    $help_form = GUICreate("Help", 259, 282, $win_posi[0], $win_posi[1])
    ;$help_form = GUICreate("Help", 259, 282, 455, 120) ;help window
    GUISetCursor (3)
    GUISetBkColor(0xD8E4F8)
    $j_h = 1
    $test_label_help = GUICtrlCreateLabel("Help", 32, 8, 190, 38) ;HELP -Header
    GUICtrlSetFont(-1, 26, 800, 0, "Electrox ")
    GUICtrlSetColor(-1, 0x808080)
    GUICtrlSetCursor (-1, 3)
    $strich_black_t_help = GUICtrlCreateLabel("_____________________________________", 6, 45, 226, 1) ;Strich_oben
    GUICtrlSetBkColor(-1, 0x000000)
    GUICtrlSetCursor (-1, 3)
    $strich_black_b_help = GUICtrlCreateLabel("_____________________________________", 6, 239, 226, 1) ;Strich_unten
    GUICtrlSetBkColor(-1, 0x000000)
    GUICtrlSetCursor (-1, 3)
    $sprache_help = GUICtrlCreateLabel("Please select your language", 17, 72, 202, 20) ;Bitte Sprache auswaehlen
    GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
    GUICtrlSetCursor (-1, 3)
    $de_button_help = GUICtrlCreateButton("de", 72, 96, 81, 33, 0) ;Button deutsch
    GUICtrlSetBkColor(-1, 0xA6CAF0)
    GUICtrlSetCursor (-1, 3)
    $eng_button_help = GUICtrlCreateButton("eng", 73, 142, 81, 33, 0) ;Button englisch
    GUICtrlSetBkColor(-1, 0xA6CAF0)
    GUICtrlSetCursor (-1, 3)
    $rus_button_help = GUICtrlCreateButton("rus", 73, 190, 81, 33, 0) ;Button russisch
    GUICtrlSetBkColor(-1, 0xA6CAF0)
    GUICtrlSetCursor (-1, 3)
    $copyright_label_help = GUICtrlCreateLabel("© by karroffel, 2008", 40, 248, 166, 27) ;(c) by karroffel, 2008
    GUICtrlSetFont(-1, 16, 400, 0, "Polo Brush MF")
    GUICtrlSetCursor (-1, 3)
    $back_button_help = GUICtrlCreateButton("back", 96, 48, 33, 17, 0) ;Button back -> main window
    GUICtrlSetBkColor(-1, 0xA6CAF0)
    GUICtrlSetCursor (-1, 3)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $back_button_help
    _back_main()
    Case $GUI_EVENT_CLOSE
    Exit
    ;Case $de_button_help
    ; _help_ger()
    ;Case $eng_button_help
    ; _help_eng()
    ;Case $rus_button_help
    ; _help_rus()
    EndSwitch
    WEnd

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

    EndFunc

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

    Func _switch_help() ;blendet main aus und help ein
    _win_res_act()
    GUISetState(@SW_HIDE)
    GUISwitch($help_form)
    GUISetCoord($win_posi[0], $win_posi[1])
    GUISetState(@SW_SHOW)
    EndFunc

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

    Func _back_main() ;blendet help aus und main ein
    _win_res_act()
    GUISetState(@SW_HIDE)
    GUISwitch($test_form)
    GUISetCoord($win_posi[0], $win_posi[1])
    GUISetState(@SW_SHOW)
    EndFunc

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

    ;---Sprachfunktionen Start---
    Func _help_ger() ;fuert die Hilfe in deutsch aus
    ;
    EndFunc

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

    Func _help_eng() ;fuert die Hilfe in englisch aus
    ;
    EndFunc

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

    Func _help_rus() ;fuert die Hilfe in russisch aus
    ;
    EndFunc
    ;---Sprachfunktionen Ende---
    ;------HELP-END--------

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

    Func _win_res_act() ;plaziert das neue Fenster an stelle des Alten
    ;-------------------
    $win_posi[0]=0
    $win_posi[1]=0
    $win_posi[2]=0
    $win_posi[3]=0
    ;-------------------
    $win_posi = WinGetPos("[active]") ;Active window stats (x,y,width,height): $size[0], $size[1], $size[2], $size[3]
    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von karroffel (30. November 2008 um 18:08)

  • Moin,

    nachdem Du den Back-Buttom gedrückt hast wird zwar die MainGUI wieder angezeigt, aber Du kehrst dann wieder in die Nachrichtenschleife der HelpGUI zurück ! ;)

    Spoiler anzeigen
    [autoit]


    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg

    Case $back_button_help
    GUIDelete ($help_form)
    GUISetState (@SW_SHOW, $main_form) ; EDIT: ... ganz vergessen ;)
    ExitLoop ; Schleife verlassen

    Case $GUI_EVENT_CLOSE
    Exit

    ;Case $de_button_help
    ; _help_ger()
    ;Case $eng_button_help
    ; _help_eng()
    ;Case $rus_button_help
    ; _help_rus()
    EndSwitch
    WEnd

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

    Return ; Funktion verlassen

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

    EndFunc

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


    So sollte es gehen.


    LG
    Greenhorn


    Einmal editiert, zuletzt von Greenhorn (27. November 2008 um 21:59)

    • Offizieller Beitrag

    Dein Script kann auch nicht richtig funzen wenn du Help drückst dann wird die Func _switchHelp aufgerufen , soweit alles klar.In der Func _SwitchHelp hast du aber eine eigene Guigetmsg abfrage drinne , wenn du Back anklickst dann wird die Func _backmain aufgerufen aber die Func _SwitchHelp aber nicht verlassen.Ergo kann der Helpü Button nicht abgefragt weden weil du in der Func _switchHelp den button in der Guigetmsg nicht abfragst . Ich würde die Guis alle bei Programmstart erstellen und nur ein und ausblenden. Die GuiGetMsg abfrage würde ich auch zentralisieren.

    Edit : Zu langsam.War mal wieder wer schneller.

  • danke euch beiden :)
    habe die variante gewählt:

    vom main fenster ins help:

    Spoiler anzeigen
    [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $exit_button_main
    Exit
    ;Case $start_button_main
    ; _main()
    Case $help_button_main
    _win_res_act()
    GUIDelete ($test_form)
    _help()
    ;Case $about_button_main
    ; _about()
    EndSwitch
    WEnd

    [/autoit]


    und vom help ins main:

    Spoiler anzeigen
    [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg

    Case $back_button_help
    _win_res_act()
    GUIDelete ($help_form)
    _main_gui()
    ExitLoop

    Case $GUI_EVENT_CLOSE
    Exit

    ;Case $de_button_help
    ; _help_ger()
    ;Case $eng_button_help
    ; _help_eng()
    ;Case $rus_button_help
    ; _help_rus()
    EndSwitch
    WEnd

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

    Return

    [/autoit]
    • Offizieller Beitrag

    Jetz mal ne Frage. Wenn du den schließen Button in deiner Hilfe Gui drückst wird das Programm geschlossen. War des so von dir beabsichigt? Sinniger wäre doch das deine HauptGui wieder geöffnet wird .

  • Du brauchst die main_gui() nicht erneut aufrufen und das Hauptfenster neu erstellen.
    So erstellst Du jedesmal das Hauptfenster neu, ohne es vorher gelöscht zu haben, das wird dein Windows dir irgendwann übel nehmen, wenn die Ressourcen aufgebraucht sind ... ;)

    Einfach nur aus der help_gui() Funktion zurückkehren, das langt.


    LG
    Greenhorn


    • Offizieller Beitrag

    Das funzt nicht, produziert den selben Fehler wie das Originalscript.
    Dein code

    [autoit]

    GUISetState (@SW_SHOW, $main_form) ; EDIT: ... ganz vergessen ;)

    [/autoit]

    sollte auch wenns nicht funzt so heißen

    [autoit]

    GUISetState (@SW_SHOW, $test_form) ; EDIT: ... ganz vergessen ;)

    [/autoit]

    ;)

    Edit: Damit das ganze funzt muß es so heißen:

    Spoiler anzeigen
    [autoit]

    While 1
    Switch GUIGetMsg()
    Case $back_button_help
    _win_res_act()
    GUIDelete ($help_form)
    GUISetState (@SW_SHOW, $test_form) ; EDIT: ... ganz vergessen ;)
    $j_h = 0
    ExitLoop ; Schleife verlassen

    Case $GUI_EVENT_CLOSE
    _win_res_act()
    GUIDelete ($help_form)
    GUISetState (@SW_SHOW, $test_form) ; EDIT: ... ganz vergessen ;)
    $j_h = 0
    ExitLoop ; Schleife verlassen

    ;Case $de_button_help
    ; _help_ger()
    ;Case $eng_button_help
    ; _help_eng()
    ;Case $rus_button_help
    ; _help_rus()
    EndSwitch
    WEnd

    [/autoit]


    Edit 2: Habe in oberen Code auch gleich eingebaut das beim Closebutton die Hauptgui wieder angezeigt wird und nicht das Prog beendet wird.

    • Offizieller Beitrag

    Es ist ratsam, alle GUI am Skriptbeginn zu erstellen und dann bei Bedarf zu zeigen oder auszublenden. Dazu brauchst du im Msg-Mode die erweiterte GUIGetMsg-Funktion, um neben dem Control auch das Fenster abzufragen.
    Hier ein Bsp.:

    [autoit]

    #include <GUIConstants.au3>

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

    $gui1 = GUICreate('Main')
    $btn1 = GUICtrlCreateButton('Zeige Hilfe', 10, 20, 100, 20)

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

    $gui2 = GUICreate('Hilfe')
    $btn2 = GUICtrlCreateButton('Zurück', 10, 20, 100, 20)

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

    GUISetState(@SW_SHOW, $gui1)

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

    While 1
    $msg = GUIGetMsg(1)
    Switch $msg[1] ; Window Handle
    Case $gui1
    Switch $msg[0] ; Event
    Case $GUI_EVENT_CLOSE
    Exit
    Case $btn1
    GUISetState(@SW_HIDE, $gui1)
    GUISetState(@SW_SHOW, $gui2)
    EndSwitch
    Case $gui2
    Select
    Case $msg[0]= $GUI_EVENT_CLOSE Or $msg[0] = $btn2
    GUISetState(@SW_SHOW, $gui1)
    GUISetState(@SW_HIDE, $gui2)
    EndSelect
    EndSwitch
    WEnd

    [/autoit]