Deutsch
Forum

Wie bekomm ich das Fenster mit einem Klick geschlossen?

 
- Seite 1 -



Deaktiviert
Hallo,
ich bin am überlegen zu XProfan zu wechseln und probiere erstmal mit der FreeProfan ein wenig herum da ich die Funktionen bzgl. Firebird erst testen möchte diese jedoch in den Freeware Versionen nicht bei sind. Die 11.2 wollte ich mir jetzt nicht extra nur für den Test kaufen, denn wenn ich zu XProfan wechsele dann wirds gleich die aktuelle X3 Version. Da FreeProfan auf den Stand der X3 sein soll bietet es sich zum testen dementsprechend aus meiner Sicht an. Dies nur als kleine Hintergrundinfo da dies mein erster Beitrag hier ist, jetzt zu meinem Problem:

Ich habe ein Hauptfenster welches über einen Button ein zweites Fenster mit einem Text und Editfeld öffnen soll. Soweit funktioniert die Sache auch wunderbar. Wenn der Nutzer jetzt im zweiten Fenster auf X (für schließen) klickt soll sich das zweite Fenster schließen und einfach zum Hauptfenster zurückkehren, erst wenn der Nutzer im Haupfenster nochmal auf X (für schließen) klickt soll sich das Programm beenden.

Das klappt jetzt auch soweit, wenn ich allerdings das Editfeld im 2. Fenster aktiviere und dann das Fenster schließen will muss ich zwei mal auf X klicken bis das Fenster sich schließt, im Normalfall müsste das gleich beim ersten klick zu gehen ...

Ich habs mal angehangen, eventuell habt ihr einen Tipp für mich.
Danke !
Declare Ende%
Ende% = 0

Proc WndMain

    Declare hMain&,hBtn1&
    WindowStyle 8
    hMain&=Create ("Window",%hWnd,"Hauptfenster",100,100,320,320)
    hBtn1&=Create("Button",hMain&,"Klick mich feste",10,10,125,23)

    WhileNot Ende% = 1

        WaitMouse

        If %MenuItem = -2

            If MessageBox("Programm beenden?","Frage",36) = 6

                Ende% = 1

            EndIf

        EndIf

        If %GetFocus = hBtn1&

            wndDlg

        EndIf

    EndWhile

EndProc

Proc wndDlg

    Declare hEdit&,hDlg&
    WindowStyle 8
    hDlg& = Create("Window",hMain&,"Cooles Fenster",120,120,320,320)
    Create("Text",hDlg&,"Textfeld",10,10,125,23)
    hEdit& = Create("Edit",hDlg&,"",10,33,125,23)

    WhileNot %MenuItem = -2

        WaitMouse

        If %MenuItem = -2

            DestroyWindow(hDlg&)

        EndIf

    EndWhile

EndProc

If Ende% = 1

    End

Else

    WndMain

EndIf

 
05.02.2017  
 



« Dieser Beitrag wurde als Lösung gekennzeichnet. »


E.T.
So mal auf die Schnelle :
Declare Ende%
Declare hMain&,hBtn1&
Ende% = 0

Proc WndMain

    WindowStyle 8+512
    hMain&=Create ("Window",%hWnd,"Hauptfenster",100,100,320,320)
    hBtn1&=Create("Button",hMain&,"Klick mich feste",10,10,125,23)

EndProc

Proc wndDlg

    Declare hEdit&,hDlg&, hDlgEnde%
    WindowStyle 8+512
    hDlg& = Create("Window",hMain&,"Cooles Fenster",120,120,320,320)
    Create("Text",hDlg&,"Textfeld",10,10,125,23)
    hEdit& = Create("Edit",hDlg&,"",10,33,125,23)

    WhileNot hDlgEnde%

        Waitinput

        If %Key=2

            DestroyWindow(hDlg&)
            hDlgEnde% = 1

        EndIf

    EndWhile

EndProc

WndMain

WhileNot Ende% = 1

    WaitInput

    If %Key = 2

        If MessageBox("Programm beenden?","Frage",36) = 6

            Ende% = 1

        EndIf

    ElseIf %GetFocus = hBtn1&

        wndDlg

    EndIf

EndWhile


Kann leider nicht mit FreeProfan testen, nur mit X3
 
XProfan X3
Grüße aus Sachsen... Mario
WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte...
05.02.2017  
 




Deaktiviert
Hallo E.T.,
ersteinmal Danke für die Hilfe. Im wesentlichen hing es wohl an WaitInput und %Key=2 für Profis trivial aber für einen Neuling eben erstmal eine echte Hürde wenn man die Feinheiten von XProfan noch nicht kennt. Da ich die Lösung nachvollziehen wollte hab ich auch nochmal eine Version gebastelt.
Declare Ende%
Ende% = 0

Proc WndMain

    Declare hMain&,hBtn1&
    WindowStyle 8
    hMain&=Create ("Window",%hWnd,"Hauptfenster",100,100,320,320)
    hBtn1&=Create("Button",hMain&,"Klick mich feste",10,10,125,23)

    WhileNot Ende% = 1

        Waitinput

        If %Key = 2

            If MessageBox("Programm beenden?","Frage",36) = 6

                Ende% = 1

            EndIf

        EndIf

        If %GetFocus = hBtn1&

            wndDlg

        EndIf

    EndWhile

EndProc

Proc wndDlg

    Declare hEdit&,hDlg&,inh$
    WindowStyle 8
    hDlg& = Create("Window",hMain&,"Cooles Fenster",120,120,320,320)
    Create("Text",hDlg&,"Textfeld",10,10,125,23)
    hEdit& = Create("Edit",hDlg&,"",10,33,125,23)

    WhileNot %Key = 2

        Waitinput

        If %Key = 2

            DestroyWindow(hDlg&)

        EndIf

    EndWhile

EndProc

If Ende% = 1

    End

Else

    WndMain

EndIf

 
05.02.2017  
 




E.T.
so nebenbei angemerkt:

Die Haupt-Programm-Schleife sollte (ebenso wie declare's fürs Hauptfenster) nicht in einer PROC liegen (hatte es in meinem Bsp. ja auch geändert). Das erstellen des Fensters kann ohne Probleme in einer eigenen Proc erfolgen. Da in einer Proc decl. Variablen (wie bei dir der Button und das Fenster) eig. auch nur in der Proc gültig sind, kann dies ganz schnell zum Chaos führen.
 
XProfan X3
Grüße aus Sachsen... Mario
WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte...
07.02.2017  
 




Deaktiviert
Hallo E.T.,
stimmt, weil lokal deklarierte Variablen, Global dann nicht sichtbar sind, ab dem dritten Fenster würde das zu Problemen führen. Mein Beispiel hat wohl noch funktioniert weil nach verlassen der zweiten Proc direkt die erste fortgesetzt wird und somit die lokalen Deklarationen noch gültig sind. Ich mach mir mal den Knoten aus dem Gehirn und beherzige das für die Zukunft

Danke für den Hinweis !
 
07.02.2017  
 




H.Brill
Hier mal ein Beispiel, wie man es auch machen kann.
Bei mehreren Fenstern muß man halt mit GetActiveWindow()
erst das aktive Fenster erfragen.
Declare Ende%, hMain&, hDlg&, hBtn1&, hBtn2&
Ende% = 0
WindowStyle 8
hMain&=Create ("Window",%hWnd,"Hauptfenster",100,100,320,320)
hBtn1&=Create("Button",hMain&,"Klick mich feste",10,10,125,23)

WhileNot Ende%

    Waitinput

    If %Key = 2

        If GetActiveWindow() = hMain&

            If MessageBox("Programm beenden?","Frage",36) = 6

                Ende% = 1

            EndIf

        EndIf

        If GetActiveWindow() = hDlg&

            DestroyWindow(hDlg&)

        EndIf

    EndIf

    If GetActiveWindow() = hDlg&

        If Clicked(hBtn2&)

            DestroyWindow(hDlg&)

        EndIf

    EndIf

    If Clicked(hBtn1&)

        wndDlg

    EndIf

EndWhile

Proc wndDlg

    Declare hEdit&,inh$
    WindowStyle 8
    hDlg& = Create("Window",hMain&,"Cooles Fenster",120,120,320,320)
    Create("Text",hDlg&,"Textfeld",10,10,125,23)
    hEdit& = Create("Edit",hDlg&,"",10,33,125,23)
    hBtn2& = Create("Button", hDlg&, "Ende", 10, 60, 60, 23)

EndProc

End

Und das Hauptfenster muß nicht unbedingt in eine Proc.
 
Benutze XPROFAN X3 + FREEPROFAN
Wir sind die XProfaner.
Sie werden von uns assimiliert.
Widerstand ist zwecklos!
Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.

Was die Borg können, können wir schon lange.
12.02.2017  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

10.714 Betrachtungen

Unbenanntvor 0 min.
Frank Reibold25.11.2022
p.specht31.05.2021
Normann Strübli31.03.2020
E.T.06.11.2019
Mehr...

Themeninformationen

Dieses Thema hat 3 Teilnehmer:

Deaktiviert (3x)
E.T. (2x)
H.Brill (1x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie