Fenster-Closer deaktivieren

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
manfred.mader@gmx.de
Beiträge: 10
Registriert: Mo 6. Jul 2015, 09:09
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit

Fenster-Closer deaktivieren

Beitrag von manfred.mader@gmx.de »

Hallo zusammen,
ich hab da ein Problem, nach dessen Lösung ich leider bisher erfolglos herumgesucht habe. Es geht um folgendes:
Ein Windows-Fenster hat ja ganz rechts oben ein Icon (ich nenne das mal 'Closer' - unter dem Begriff findet man
aber nichts!), um das Fenster zu schließen. Dabei wird ein im Fenster laufendes Programm beendet. Ich habe nun
ein eigenes Programm geschrieben, welches "sauber" über ein "Exit" im Menü - bzw. einen entsprechenden
Button - verlassen werden soll (bzw. muß!).
Frage: Wie kann ich das Closer-Icon des Fensters deaktivieren, um den Anwender zu zwingen, mein Programm
auf dem "sauberen" Weg zu verlassen, statt einfach nur das Fenster "wegzuklicken"?
Danke schon mal für jede Antwort!
Manfred

Benutzeravatar
theo
Beiträge: 10872
Registriert: Mo 11. Sep 2006, 19:01

Re: Fenster-Closer deaktivieren

Beitrag von theo »

Im Event OnCloseQuery des Formulars kannst du das Programm sauber beenden oder das Schließen verhindern.

manfred.mader@gmx.de
Beiträge: 10
Registriert: Mo 6. Jul 2015, 09:09
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit

Re: Fenster-Closer deaktivieren

Beitrag von manfred.mader@gmx.de »

theo hat geschrieben:Im Event OnCloseQuery des Formulars kannst du das Programm sauber beenden oder das Schließen verhindern.
Danke für den Tip! Er funktioniert; nur leider trifft er nicht so ganz ins Schwarze. Wenn ich jetzt (1.) den Closer anklicke (das "X" ganz rechts oben),
dann erscheint eine Dialogbox mit OK oder CANCEL. Wenn ich andererseits (2.) den "erlaubten" Ausstieg über mein Programm-Menü wähle, erscheint
die gleiche Dialogbox auch. Das hilft ja schon mal ein Stück weiter; idealerweise hätte ich's aber gern so:
Im Fall (1.) soll garnichts passieren (der Click auf "X" wird schlicht ignoriert).
Im Fall (2.) soll - ohne weitere Rückfrage(!) - das Programm beendet werden.
Gibt's da vielleicht noch 'ne Idee?

@theo: Die Schnelligkeit deiner Reaktion hat mich echt vom Sitz gehauen, ehrlich! Danke noch mal!

Manfred

Benutzeravatar
theo
Beiträge: 10872
Registriert: Mo 11. Sep 2006, 19:01

Re: Fenster-Closer deaktivieren

Beitrag von theo »

Wieso kommt da eine Dialogbox?

Antrepolit
Beiträge: 340
Registriert: Di 12. Sep 2006, 08:57
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Kontaktdaten:

Re: Fenster-Closer deaktivieren

Beitrag von Antrepolit »

Was soll diese Vorgehensweise überhaupt? Es hat einen Grund, dass man Programme über das Icon beenden kann. Wenn du dem User nun das "X" wegnimmst, wertet er das schlimmstenfalls als Bug in deiner Software.
Nun stell' dir mal vor, jemand baut deine Tür zuhause um. Du kannst zwar an der Klinke wedeln wie verrückt, aber sie ist zugeschlossen und du kannst sie nicht aufschließen. Würdest du das so haben wollen?
Grüße, Antrepolit

care only if your os is really burning

wp_xyz
Beiträge: 5151
Registriert: Fr 8. Apr 2011, 09:01

Re: Fenster-Closer deaktivieren

Beitrag von wp_xyz »

Du musst in deinem Exit-Menüeintrag ein Flag setzen, dass dieser Weg gewählt wurde, das Programm zu beenden. Damit kannst du dann im OnCloseQuery erkennen, ob der "Closer" (Flag nicht gesetzt) oder der Menüeintrag (Flag gesetzt) geklickt wurde.

Ich weiß ja nicht, was bei dem Exit-Menüeintrag anders sein soll. Aber "sauber" beenden musst du dein Programm immer, egal was der User geklickt hat. Generell halte ich diese Unterscheidung für problematisch und unnötig.

Falls du bei dem Exit-Menüeintrag Aufräumarbeiten machen willst, dann sind diese falsch platziert, diese gehören ins OnDestroy des Formulars (oder falls da schon zu viel zerstört ist, ins OnCloseQuery).

Marsmännchen
Beiträge: 294
Registriert: So 4. Mai 2014, 21:32
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10
CPU-Target: 64bit
Wohnort: Oranienburg

Re: Fenster-Closer deaktivieren

Beitrag von Marsmännchen »

Das mit der Dialogbox ist mir auch nicht klar (kann man das iwo in den Settings einstellen?). Ansonsten würde ich, wenn ich mehrere Wege anbiete, mein Prog zu beenden, dafür eine entsprechende Aufräumprozedur schreiben, auf die sowohl das Closing-Event als auch meine Menüfunktion (und von mir aus dann auch weitere Wege zur Beendigung - z.B. Shortcut) verweisen. Das macht auch die spätere Wartung einfacher. Oder handel ich mir damit wieder andere Probleme ein?
Ich mag Pascal...

Antworten