Hilfefenster öffnen / schließen

  • Hi

    die Beschreibungen zu meinem Programm habe ich in einem 'Hilfefenster' ausgelagert und binde den Quellcode über include ein.
    Auf das Hilfefenster greift man über einem Button im Hauptprogramm zu, so dass sich ein Fenster mit den Beschreibungen zu dem Programm öffnet.

    Wenn nun das HilfeFenster geschlossen wird, schließt sich auch das Programmfenster, da beides über den gleichen Eventhanler läuft.

    [autoit]


    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop

    [/autoit]

    Gibt es ansonsten auch elegantere Wege?

    Grüße und Danke für die Hilfe.

    Guido

  • Hallo Schnitzel,

    Danke für den Tipp, über die Online-Hilfe (dein Link) habe ich ein schönes Beispiel gefunden.

    Ich habe noch eine zusätzliche Abfrage eingebaut, so dass man das Fenster nicht mehrmals öffnen kann.

    Spoiler anzeigen
    [autoit]


    $msg = 0
    While 1
    $msg = GUIGetMsg(1)
    Select
    Case $msg[0] = $GUI_EVENT_CLOSE and $msg[1] = $mgui
    ExitLoop
    Case $msg[0] = $GUI_EVENT_CLOSE and $msg[1] = $hgui
    GUIDelete($msg[1])
    case $msg[0] = $btn_hilfe
    if not WinExists("Adminscript - ProzLast")Then
    $hgui = GUICreate("Adminscript - ProzLast",700,500)
    GUISetBkColor("0xFFFFCA")
    GUISetFont(9, 400, 0, "Arial")
    GUISetState(@SW_SHOW)
    _content()
    Else
    WinActivate("Adminscript - ProzLast")
    EndIf
    EndSelect
    WEnd

    [/autoit]

    Eine Hürde habe ich aber noch.
    Wenn ich auf einem Button im Hilfsfenster klicke, wird dieser nicht ausgeführt.
    Select-Abfrage im Hilfsfenter

    Spoiler anzeigen
    [autoit]


    $msg = GUIGetMsg(1)
    Select
    Case $msg[1] = $www
    ShellExecute("http://www.......de")
    EndSelect

    [/autoit]

    Packe ich die Abfrage in den Select von der Hauptdatei wird sofort massenweise der Browser aufgerufen, siehe oberen Spoiler.

    Wie kann ich die Button im Hilfsfenster ansprechen?
    Ich würde nur ungern die Abfragen von Hauptdatei und Hilfsdatei komplett in der Hauptdatei abfangen, weil dann habe ich einen zu großen Mischmasch und das Auslagern lohnt sich nicht mehr.

    Grüße
    Guido

  • Hallo ThinkCross !

    Habe dein code ein wenig umgeschrieben so soltes klapen!

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>

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

    Global $hgui1 = GUICreate("Test Gui", 700, 500)
    GUISetBkColor("0xFFFFCA")
    GUISetFont(9, 400, 0, "Arial")
    Local $btn_hilfe = GUICtrlCreateButton('Test', 20, 50, 80, 20)
    GUISetState()

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

    Global $hgui = GUICreate("Adminscript - ProzLast", 200, 180)
    GUISetFont(9, 400, 0, "Arial")
    Local $www = GUICtrlCreateButton('www.goggel.de', 20, 50, 120, 20)
    GUISetState(@SW_HIDE, $hgui)

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

    $msg = 0
    While 1
    $msg = GUIGetMsg(1)
    Select
    Case $msg[0] = $GUI_EVENT_CLOSE
    ExitLoop
    Case $msg[0] = $GUI_EVENT_CLOSE
    GUIDelete($msg[1])
    Case $msg[0] = $btn_hilfe
    GUISetState(@SW_SHOW, $hgui)
    WinActivate("Adminscript - ProzLast")
    Case $msg[0] = $www
    ShellExecute("http://www.goggel.de")
    EndSelect
    WEnd

    [/autoit]


    LG Kleiner

  • Hallo Kleiner,

    ja, es funktioniert aber nur solange, wie ich den Button nicht in einer Funktion packe.

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>

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

    Global $hgui1 = GUICreate("Test Gui", 700, 500)
    GUISetBkColor("0xFFFFCA")
    GUISetFont(9, 400, 0, "Arial")
    Local $btn_hilfe = GUICtrlCreateButton('Test', 20, 50, 80, 20)
    GUISetState()

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

    Global $hgui = GUICreate("Adminscript - ProzLast", 200, 180)
    GUISetFont(9, 400, 0, "Arial")
    GUISetState(@SW_HIDE, $hgui)

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

    Global $www

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

    func _hgui()
    $www = GUICtrlCreateButton('www.goggel.de', 20, 50, 120, 20)
    EndFunc

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

    $msg = 0
    While 1
    $msg = GUIGetMsg(1)
    Select
    Case $msg[0] = $GUI_EVENT_CLOSE
    ExitLoop
    Case $msg[0] = $GUI_EVENT_CLOSE
    GUIDelete($msg[1])
    Case $msg[0] = $btn_hilfe
    GUISetState(@SW_SHOW, $hgui)
    WinActivate("Adminscript - ProzLast")
    _hgui()
    Case $msg[0] = $www
    ShellExecute("http://www.goggel.de")
    EndSelect
    WEnd

    [/autoit]

    Ich verstehe nicht warum, aber so rasst sofort der Browser los.
    Auch wenn ich die Variable mit $www= "" initialisiere legt der Browser los.

    Wie kann ich das Abfangen?

    Grüße und Danke
    Guido

  • Frage was soll der Butten denn in der FUNC??????????????????? ?(

    Das wird so nicht gehen, wie oder was hast du dir denn vorgestellt was passieren soll in der func!

    LG Kleinr

  • Dass ihr alles immer so kompliziert machen müsst... warum nicht eifnach so:

    [autoit]

    $msg = 0

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

    #include <GUIConstants.au3>

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

    #region - GUI Create
    $hauptGUI = GUICreate('Test')
    $btn_hilfe = GUICtrlCreateButton("Hilfe",100,200)
    GUISetState(@SW_SHOW)
    #endregion
    $hilfeGUI = GUICreate('Hilfe',200,500)
    $www = GUICtrlCreateButton("google",100,200)

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

    GUISwitch($hauptGUI)

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

    While 1
    $msg = GUIGetMsg(1)
    Switch $msg[1]
    Case $hauptGUI
    Switch $msg[0]
    Case $GUI_EVENT_CLOSE
    Exit
    Case $btn_hilfe
    GUISetState(@SW_SHOW,$hilfeGUI)
    EndSwitch
    Case $hilfeGUI
    Switch $msg[0]
    Case $GUI_EVENT_CLOSE
    GUISetState(@SW_HIDE,$hilfeGUI)
    Case $www
    ShellExecute("www.google.de")
    EndSwitch
    EndSwitch
    WEnd

    [/autoit]


    PS würdest du

    [autoit]


    Global $www = "Ich bin ein toller Knopf"

    [/autoit]


    schreiben, würde auch der Browser nicht sofort starten.
    Denn : Wenn $www = "" ist, dann wird, solange GUIGetMsg = "" ist, also nix in der GUI passiert, der Browser gestartet. Du hast ja sogesehen das hier:

    [autoit]


    $msg = "" ; weil ja nix passiert gibt GUIGetMsg einfach "" aus.
    $www = ""
    Select
    Case $msg = $www ; was ja hier der Fall ist,
    blablablaFunktionUndWasWeißIchNichtAlles()
    Endselect

    [/autoit]
  • Danke für Eure Hilfe und den Erklärungen, so klappt es jetzt. :)

    Kann ich eigentlich irgendwie abfragen, ob ein Fenster auf show oder hide steht?
    In der Hilfe finde ich dazu nichts.

    Kleiner
    Ich lagere gerne Sachen in Funktionen aus, dadurch wird der Quellcode meiner Ansicht nach übersichtlicher.
    Das mit dem Button ist natürlich nur ein Beispiel bzw. Platzhalter gewesen.

    Grüße
    Guido

  • Wenn man das Hilfefenster per parent-Parameter (s.

    [autoit]

    GuiCreate()

    [/autoit]

    ) als "Child" einbindet, muss man sich über Öffnen/Schliessen keine Gedanken mehr machen. Und spätestens bei der Verwendung von mehreren Child-Fenstern wird auch der OnEvent-Modus interessant, bzw zeigt die Vorteile gegenüber dem Msgmode....