![]() |
Abfrage ob Pogramm geschlossen werden soll.
Hallo Leute, ich bin gerade leicht am verzweifeln.
Ich wollte bei meinem Programm eine Abfrage machen, wenn man das Programm schließen will, ob man sich sicher ist oder nicht. Wenn man es nicht will sol ldas Programm nicht zugehen, ansonsten schon. Ich habs mit dem Quellcode probiert
Delphi-Quellcode:
Aber das will irgendwie nicht so ganz.
if MessageDlg('Programm schließen?', mtConfirmation, [mbyes, mbno], 0) = mrYes then
close Wenn ich auf Nein klicke schließt sich das Programm, bei Ja kommt der Dialog erneut und so weiter. Hoffe mir kann jemand helfen. mfg Sudrow |
Re: Abfrage ob Pogramm geschlossen werden soll.
Diese Codezeile seht vermutlich im CloseQuerry?(wenn nicht sollte sie da hin :) )
Wenn du im CloseQuerry close aufrufst, kommst du da ja wieder an^^. Du musst den var parameter "Canclose" vom querry auf true/false setzen true wenns geschlossen werden soll, false wenn nicht. Wenn du momentam bei deinem Dialog "nein" klickst schliesst sich dein Programm weil CanClose default mässig true ist. |
Re: Abfrage ob Pogramm geschlossen werden soll.
Wo rufst du denn den MessageDlg auf? Nicht etwa in FormClose? ;)
|
Re: Abfrage ob Pogramm geschlossen werden soll.
Zitat:
Delphi-Quellcode:
Nur wie setz ich das CanClose auf false, also wie ist der Befehl dafür?
procedure THaupt.FormClose(Sender: TObject; var Action: TCloseAction);
begin if MessageDlg('Programm schließen?', mtConfirmation, [mbyes, mbno], 0) = mrYes then close end; Danke schonmal für die Antwort. |
Re: Abfrage ob Pogramm geschlossen werden soll.
Auch im FormClose hat so ein Dialog eine Chance zu funktionieren wenn man den Parameter Action manipuliert.
@Sudrow: Schau am besten mal in die Hilfe zu den Ereignissen OnClose und OnCloseQuery. Da werden sicher auch die Parameter erklärt. |
Re: Abfrage ob Pogramm geschlossen werden soll.
Das ist ja nicht OnCloseQuery sondern OnClose^^
Schau dir mal TForm.OnCloseQuery an €dit hab mal selber in die hilfe geschaut^^ wenn du im OnClose Action auf caFree setzt, wird dein form auch geclosed. |
Re: Abfrage ob Pogramm geschlossen werden soll.
Zusammengefasst:
Delphi-Quellcode:
procedure TFormWuppdi.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin CanClose := MessageDlg('Programm schließen?', mtConfirmation, [mbyes, mbno], 0) = mrYes; end; |
Re: Abfrage ob Pogramm geschlossen werden soll.
oder eben:
Delphi-Quellcode:
procedure THaupt.FormClose(Sender: TObject; var Action: TCloseAction);
begin if (MessageDlg('Programm schließen?', mtConfirmation, [mbyes, mbno], 0) <> mrYes) then Action := caNone; end; |
Re: Abfrage ob Pogramm geschlossen werden soll.
Versuchs mal im CloseQuery:
Delphi-Quellcode:
if MessageDlg('Programm schließen?', mtConfirmation, [mbyes, mbno], 0) = mrYes then
CanClose := True else CanClose := False; |
Re: Abfrage ob Pogramm geschlossen werden soll.
Wo Danke für die vielen und schnellen Antworten.
Ich hab mir jetzt eine der vielen rausgesucht und sie funktioniert. Dankeschön ;) Schönen Tag noch. MFG Sudrow |
Re: Abfrage ob Pogramm geschlossen werden soll.
Zitat:
Habe auch im Moment ein paar Problemchen mit dem ordnungsgemäßen Schließen des Programms. Das Problem: Wenn ich es genau so mache wie oben, ist die Anwendung zwar weg, steht aber im Taskmanager noch drin. Hat jemand 'ne Ahnung, woran das liegt? Besten Dank im Voraus, Sven M. |
Re: Abfrage ob Pogramm geschlossen werden soll.
Tritt das Phänomen auch dann auf, wenn Du oben zitierten Code auskommentierst?
|
Re: Abfrage ob Pogramm geschlossen werden soll.
Ja, auch dann!
Kann es eventuell daran liegen, dass das Fenster, aus dem ich das Programm beenden möchte, nicht das im Projektmanager eingestellte Hauptfenster ist? Dann hätte ich das nächste Problem: Wie kann ich abfragen, von wo aus einer Procedure aufgerufen wird. Denn im OnCloseQuery des Hauptformulars müsste ich ja dann den Fall abfangen, dass ich das Programm beenden möchte oder nur das Fenster schließen will...Verwirrend...;) |
Re: Abfrage ob Pogramm geschlossen werden soll.
@Seven: Das kommt in aller Regel vor wenn man mit Threads hantiert und da noch einer läuft oder man mit Application.Processmessages Nachrichten abarbeitet während man noch in einer Schleife hängt.
|
Re: Abfrage ob Pogramm geschlossen werden soll.
Hab's gefunden...=)
Lag tatsächlich daran, dass ich das Programm von einem anderen als dem Hauptfesnter (in den Projektoptionen) aus schließen wollte. Hab's jetzt so gelöst, dass das eigentliche Hauptfenster (aus User-Sicht) auch das Hauptfenster in den Projektoptionen ist und das Fenster, das beim Start angezeigt werden soll (deswegen war's das Hauptfenster) über einen Timer geöffnet wird...:) |
Re: Abfrage ob Pogramm geschlossen werden soll.
Also ich persönlich mag den MessageDlg nicht so :gruebel:
Ich mache das immer so:
Delphi-Quellcode:
procedure THaupt.FormClose(Sender: TObject; var Action: TCloseAction);
begin if (Application.MessageBox('Sind Sie sicher, dass Sie diese Anwendung schließen möchten?', 'Information', MB_IconInformation + MB_YesNo) = ID_Yes) then begin // ggf. alles freigeben, Bitmaps, SL's usw Self.Close; // ENDE! end; end; |
Re: Abfrage ob Pogramm geschlossen werden soll.
Hat das bestimmte Gründe?
|
Re: Abfrage ob Pogramm geschlossen werden soll.
Eine MessageBox wird von Windows gezeichnet, ein MessageDlg von Delphi.
|
Re: Abfrage ob Pogramm geschlossen werden soll.
Geht diese Abfrage auch modal ?
Edit: Schon gut, ist schon standardmäßig modal. Bei mir wird die Abfrage durch einen Timer mehrmals aufgerufen. Muss nur den Timer ausschaten, damit die Abfrage nicht nochmal erfolgt. |
Re: Abfrage ob Pogramm geschlossen werden soll.
Die Windows.MessageBox zumindest geht auch modal
![]() Zitat:
|
Re: Abfrage ob Pogramm geschlossen werden soll.
Also, ich finde solche Dialoge immer absolut nervig. Eine Nachfrage bei drohendem Datenverlust ist OK, aber nicht, wenn ich das Programm nur schließen will. Wenn ich es versehentlich schließe, mache ich es eben wieder auf. Solche Abfragen hinterlassen bei mir immer einen faden Beigeschmack, als wenn der Entwickler der Meinung ist, er hätte das tollste Programm geschrieben und könnte nicht glauben, dass man es auch mal beenden möchte. Und das beste ist, solche Leute machen sich dann bei Windows darüber lustig, wenn Windows nachfragt, ob eine Aktion auch wirklich ausgeführt werden soll.
|
Re: Abfrage ob Pogramm geschlossen werden soll.
Bei MDI-Anwendungen können solche Abfragen aber wieder Sinn machen. Mir selbst ist es schon oft passiert, dass ich statt des Clientfensters das Hauptfenster geschlossen hätte, wenn unsere Software nicht nachfragen würde.
|
Re: Abfrage ob Pogramm geschlossen werden soll.
Zitat:
sind in den MDI-Fenstern alle Daten gespeichert? - Nein - Dann fragen wir lieber mal nach (speichern, nicht speichern, abbrechen) - Ja - und tschüssikowski |
Re: Abfrage ob Pogramm geschlossen werden soll.
Ich meinte: wenn ich das Clientfenster schließen will, erwische ich versehentlich schonmal das falsche "X" ;)
|
Re: Abfrage ob Pogramm geschlossen werden soll.
Zitat:
Eine weitere Möglichkeit, per Option das App-X zum Schließen zum Hide oder Minimize umfunktionieren. Wer wirklich beenden will, kann auch Datei-Beenden anklicken. Aber das ständige Nachfragen "Sind Sie im Vollbesitz ihrer geistigen Kräfte, habe Sie das 20-seitige Formblatt gelesen, mit Ihrer Mutter telefoniert ... und jetzt immer noch sicher, dass sie dieses SuperDuperProgramm schließen wollen?" :mrgreen: PS: Software FOR people - not against |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz