Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Form1.Deactivate abfangen (https://www.delphipraxis.net/76857-form1-deactivate-abfangen.html)

Go2EITS 11. Sep 2006 09:47


Form1.Deactivate abfangen
 
Hallo DP,

mal wieder eine Frage:

Ich habe eine Form und eine Aktion, die länger dauert. Der User will die Form aber während der Aktion schließen. Da gibst es eine Exception, weil in der nun nicht vorhandenen Form Ausgaben/Anzeigen in Panels ausgeführt werden. Ich habe nachgesehen, welche Eigenschaft beim klicken vom X in der Form ausgeführt wird:
Delphi-Quellcode:
 procedure TForm5.FormDeactivate(Sender: TObject);
begin
showmessage('deact');
end;
Ich denke, ich muss den Aufruf abfangen, weil meine Form schon deactiviert ist, wenn ich showmessage anzeigen lasse. Ist klar, dass ich eine boolsche Variable habe, die mir sagt, ob die Aktion noch läuft, oder die Form geschlossen werden darf.

Hoffentlich muss ich nicht erst das Object ableiten und neue Methoden einbauen (Graus!!!!)
Hat da jemand einen Vorschlag? :coder2:

Beste Grüße
Go2EITS

Steve 11. Sep 2006 09:52

Re: Form1.Deactivate abfangen
 
Hi,

schau Dir mal Delphi-Referenz durchsuchenTForm.OnCloseQuery an. OnDeactivate wird auch aufgerufen, wenn man irgendwo außerhalb des Fensters klickt... OnCloseQuery erst wenn das Fenster wirklich geschlossen werden soll...

Gruß
Stephan :dance:

Go2EITS 11. Sep 2006 09:59

Re: Form1.Deactivate abfangen
 
Danke Steve, ONCLOSE zeigt mir die Form und die Message [nachtrag] bevor dann das Fenster geschlossen wird. Und das will ich verhindern. [\nachtrag] Wie nun weiter? :gruebel:

Luckie 11. Sep 2006 10:00

Re: Form1.Deactivate abfangen
 
Was macht wohl der Parameter CanClose?

Go2EITS 11. Sep 2006 10:05

Re: Form1.Deactivate abfangen
 
Danke Steve, danke Lukie! :thumb:
Das ist es!

Hier die Lösung mit F1:
Delphi-Quellcode:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  if MessageDlg('Close the form?', mtConfirmation,
    [mbOk, mbCancel], 0) = mrCancel then
     CanClose := False;
end;
Merci! Go2EITS

Go2EITS 5. Okt 2006 08:01

Re: Form1.Deactivate abfangen
 
Kleiner Schönheitsfehler in der vorstehenden Lösung: Damit das Programm beim nächsten Schließen beendet werden kann, denn wenn CanClose:=False ist, kommt man aus dem Programm nicht mehr so einfach raus, muss irgendwo ein CanClose:=True rein. z. B. so:

Delphi-Quellcode:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  if MessageDlg('Close the form?', mtConfirmation,
    [mbOk, mbCancel], 0) = mrCancel then
     CanClose := False else
     CanClose := True;
end;
F1 hat nicht immer offensichtlich die beste Lösung. Alles klar?
Beste Grüße
Go2EITS


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:57 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz