Problem mit 2tem GUI Fenster

  • Hi,

    Ich hab da ein Problem. Ich erstelle 2 GUI Fenster, aber wenn ich auf schließen "$GUI_EVENT_CLOSE" klicke schließt sich das falsche Fenster. Die Fenster sind im Skript mit "$HauptGUI" und "$zweitGUI" beschrieben. Wär sehr nett von euch wenn ihr mal gucken würdet warum.

    Danke schonmal im Vorraus

    Gruß

    Der Driver


    Spoiler anzeigen
    [autoit]

    #Region ; Include's
    #include <GUIConstantsEx.au3> ;Importieren des Skripts "GUIConstansEx.au3"
    #include <GUIConstants.au3> ;Importieren des Skripts "GUIConstans.au3"
    #EndRegion
    #Region ; Definition und Initialisierung
    Dim $Zeilenanfang[11]
    Dim $Inhalt[11] ;Declarieren des Array's "Inhalt" mit 11 Platzhaltern
    Dim $InputControlIDs[11]
    Dim $GUI[5]
    Global $ButtonB2
    Global $ZweitGUI
    Opt ( "TrayMenuMode", 1 ) ;Entfernen des PopUp Menüs wenn man auf das SystemTrayIcon Klickt
    $Anzeige = 0 ; Variable "Anzeige" Initialisiert
    $EtwasEingetragen = 0 ; Variable "EtwasEingetragen" Initialisiert
    $TrayButtonA = TrayCreateItem ( "Anzeigen" ) ;Der Variable wird die ControlID des dabei entstehenden Traymenüeintrages zugewiesen
    $TrayButtonB = TrayCreateItem ( "Beenden" ) ;Der Variable wird die ControlID des dabei entstehenden Traymenüeintrages zugewiesen
    $LabelAbstand = 14
    $InputAbstand = 10
    #EndRegion
    #Region ; GUI Erstellen
    $HauptGUI = GUICreate ( "Tagestätigkeiten vom: " & @MDAY & "." & @MON & "." & @YEAR, 450 , 340 )

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

    For $z = 1 to 10 step + 1
    GUICtrlCreateLabel ( $z & "." , 5 , $LabelAbstand )
    $LabelAbstand = $Labelabstand + 30
    Next

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

    For $z1 = 1 to 10 step + 1
    $InputControlIDs[$z1] = GUICtrlCreateInput ( "", 20 , $InputAbstand , 420)
    $InputAbstand = $InputAbstand + 30
    Next

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

    $ButtonB = GUICtrlCreateButton ( "Beenden", (450/2)-(75/2) , 310, 75, 23)
    $ButtonS = GUICtrlCreateButton ( "Speichern", (450/4)-(75/2) , 310, 75, 23)
    $ButtonL = GUICtrlCreateButton ( "Laden", ((450/4)*3)-(75/2) , 310, 75, 23)
    #EndRegion
    #Region ; Hauptschleife
    While 1 ; Endlose Wihle-Schleife
    $GUI = GUIGetMsg(1) ; Der Variable wird der Gui-Status zugewisen
    $Tray = TrayGetMsg() ; Der Variable wird der Tray-Status zugewisen
    If $EtwasEingetragen = 0 Then ; Wenn bis jetzt noch keine Eintragung gemacht wurde dann...
    For $z2Time = 14 to 17 step +1 ; Zähle von 14 bis 17 in einer Schritten
    If @HOUR = $z2Time Then ; Wenn es genau 14,15,16 oder 17 Uhr ist dann...
    $Anzeige = 1 ; ...setze die Variable auf "1"
    EndIf ; Ende der If-Abfrage
    Next ; Nächster Zählerdurchlauf
    EndIf ; Ende der If-Abfrage
    If $Anzeige = 1 Then ; Wenn die Variable = 1 ist dann...
    GUISetState (@SW_SHOW , $HauptGUI) ; ... mache die Gui sichtbar
    ElseIf $Anzeige = 0 Then ; Oder wenn die Variable = 0 ist dann...
    GUISetState (@SW_HIDE , $HauptGUI) ; Ansonsten mache die Gui unsichtbar
    EndIf ; Ende der If-Abfrage
    Select ; Anfang des Select Vorgangs
    Case $GUI[0] = $ButtonB ; Wurde der Button "Beenden" gedrück...
    $Anzeige = 0 ; ...setze die Variable auf "0"
    Case $GUI[0] = $GUI_EVENT_CLOSE ; Wurde der rote Button mit dem X (Schließen Button) gedrückt...
    $Anzeige = 0 ; ...setze die Variable auf "0"
    Case $Tray = $TrayButtonB ; Wurde der Button "Beenden" im SystemTrayMenü gedrückt...
    ExitLoop ; ... so verlasse die Schleife
    Case $Tray = $TrayButtonA ; Wurde der Button "Anzeigen" im SystemTrayMenü gedrückt...
    $Anzeige = 1 ; ... setze die Variable auf "1"
    Case $GUI[0] = $ButtonL ; Wurde der button "Laden" gedrückt...
    $LadeDatum = InputBox ( "Datum", "Geben Sie das Datum " & "(" & "TT.MM.JJJJ" & ")" & " ein, dessen Tätigkeiten Sie laden möchten.") ; ... Weise der Variable den Inhalt einer InputBox zu
    For $z3 = 1 to 10 Step +1 ; Zähle von 1 bis 10 in einer Schritten
    $Inhalt[$z3] = IniRead ( "C:\Temp\Tagestätigkeiten.ini", $LadeDatum , $z3, "") ; Lese den Wert eines Schlüssels, innerhalb der *.ini Datei aus und weise sie dem Array zu
    Next ; Nächster Zählerdurchlauf
    $zweitGUI = GUICreate ( "Tagestätigkeit vom: " & $LadeDatum, 450, 340 ) ; Hier wird das zweite Fenster Erstellt
    $InputAbstand = 10 ; Zuweisen des Wertes
    For $z4 = 1 to 10 step + 1 ; Zähle von 1 bis 10 in einer Schritten
    GUICtrlCreateInput ( $Inhalt[$z4], 20 , $InputAbstand , 420) ; Erstelle eine neue InputBox mit der vorherig ausgelesenen Daten
    $InputAbstand = $InputAbstand + 30 ; Erhöhe Variableninhalt um 30
    Next ; Nächster Zählerdurchlauf
    $ButtonB2 = GUICtrlCreateButton ( "Zurück", (450/2)-(75/2) , 310, 75, 23) ; Erstellen des " Zurück " Buttons
    GUISetState ( @SW_SHOW , $zweitGUI ) ; Mache die GUI Sichtbar
    Case $GUI[0] = $GUI_EVENT_CLOSE And $GUI[1] = $zweitGUI ; Wenn das GUI Event " Close " in der zweiten GUI auftritt dann...
    GUISetState ( @SW_Hide , $zweitGUI ) ; Mache die GUI sichtbar
    Case $GUI[0] = $ButtonS ; Wurde der Button "Speichern" gedrückt...
    $EtwasEingetragen = 1 ; Setze " Es wurde was eingetragen " auf "1"
    For $z5 = 1 To 10 step + 1
    $Inhalt[$z5] = GUICtrlRead ( $InputControlIDs[$z5] ); Weise den Inhalt der InputBox dem Array zu
    Next
    For $z6 = 1 to 10 Step +1 ; Zähle von 1 bis 10 in einer Schritten2
    IniWrite ( "C:\Temp\Tagestätigkeiten.ini", @MDAY & "." & @MON & "." & @YEAR , $z6 , $Inhalt[$z6] ) ; Erstelle eine *.ini Datei (Sofern sie noch nicht vorhanden ist) und schreibe in die Section "Datum" den Schlüssel "$z1" mit dem Wert "$Inhalt[$z1]"
    Next ; Wiederhole den letzten Vorgang bis "$z1" 10 ist
    EndSelect ; Ende des "Select" Vorgangs
    WEnd ; Ende der "While" Schleife
    #EndRegion

    [/autoit]
  • Danke erstmal für deine Antwort!

    Nein es schließt sich die gui, die als erste geöffnet wurde... Und sie haben beide einen namen ($HauptGUI und $zweitGUI) und ich sage auch beim schließen welche der GUI geschlossen werden soll... wäre vielleicht ganz nett wenn man ein blick in mein Skript machen würde ;)


    Wichtig sind eigentlich nur Zeile 62 - 76


    Gruß

    Der Driver

  • Hallo

    [autoit]

    If $Anzeige = 1 Then ; Wenn die Variable = 1 ist dann...
    GUISetState(@SW_SHOW, $HauptGUI) ; ... mache die Gui sichtbar
    ElseIf $Anzeige = 0 Then ; Oder wenn die Variable = 0 ist dann...
    GUISetState(@SW_HIDE, $HauptGUI) ; Ansonsten mache die Gui unsichtbar ;<=====
    EndIf ; Ende der If-Abfrage
    Select ; Anfang des Select Vorgangs
    Case $GUI[0] = $ButtonB ; Wurde der Button "Beenden" gedrück...
    $Anzeige = 0 ; ...setze die Variable auf "0"
    Case $GUI[0] = $GUI_EVENT_CLOSE ; Wurde der rote Button mit dem X (Schließen Button) gedrückt...;<===
    $Anzeige = 0 ; ...setze die Variable auf "0"

    [/autoit]

    über den Umweg $Anzeige versteckst du die $HauptGui,

    mfg (Auto)Bert

  • Das ist auch richtig so ^^ ...

    mein problem is dass, wenn ich die zweite GUI geöffnet habe und da auf das rote X oben rechts drücke ( $GUI_EVENT_CLOSE ) das dann das andere Gui Fenster versteckt wird... aber nicht das zweite...


    Gruß

    Driver

  • Hallo

    dass ist nicht richtig so da du nicht abbrüfts ob die Meldung von $HauptGui gekommen ist, und da $Anzeige dann auf 0 steht wird beim nächsten Durchlauf automatisch die 1. versteckt. Dies scheint mir aber nicht das einzige Problem in deinem Programm zu sein, so würde ich das Erzeugen der 2. ausserhalb der Schleife regeln,

    mfg (Auto)Bert

  • Wäre ganz nett wenn du mir kurz erzählen könntest wie ich die zweite gui aus der schleife hole... denn erst wenn der button "Laden" gedrückt wurde, wird das Ladedatum in den Fenstertitel eingefügt. Dies wiederum geschieht in dem GUICreate... oder weisst du vielleicht wie ich den Fenstertitel, während das Fenster angezeigt wird, verändern kann?

    Einmal editiert, zuletzt von D®iv3r (4. Juni 2009 um 11:50)

  • Hallo D®iv3r,

    wofür gibt es wohl den Befehl WinSetTitle ( "title", "text", "newtitle" ),

    hast du bei dem Problem mit dem Schliessen von $Hauptgui meinen Hinweis der letzten beiden Posts beachtet,sprich Zeile 56 wie folgt abgeändert:

    [autoit]

    Case $GUI[0] = $GUI_EVENT_CLOSE And $GUI[0] = $HauptGUI ; Wurde der rote Button mit dem X (Schließen Button) gedrückt..

    [/autoit]

    mfg (Auto)Bert

  • Ja habe ich ^^

    Danke für alles !

    Den Befehl WinSetTitle habe ich gesucht ^^ war einfach nur zu blind !! ^^

    Danke danke!

    Ich finde den Button zum Schließen des Threads nicht :-S

    Gruß

    D®iv3r

  • Hallo D®iv3r,

    den Präfix kannst du af gelöst stellen, in dem du deinen 1. Beitrag bearbeitest und dort in Nähe der Überschrift den Präfix umstellst,

    mfg (Auto)Bert