AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi OnFormDestroy Frage "wirklich schließen"
Thema durchsuchen
Ansicht
Themen-Optionen

OnFormDestroy Frage "wirklich schließen"

Ein Thema von happyaura · begonnen am 14. Apr 2006 · letzter Beitrag vom 14. Apr 2006
Antwort Antwort
happyaura

Registriert seit: 12. Jan 2005
Ort: Hamburg
73 Beiträge
 
Delphi 6 Personal
 
#1

OnFormDestroy Frage "wirklich schließen"

  Alt 14. Apr 2006, 10:25
Hallo allerseits,

ich möchte gerne eine den Benutzer fragen, ob ein Programm wirklich geschlossen werden soll, nachdem oben rechts auf das x geklickt oder das fenster mit alt+F4 geschlossen werden soll. meine idee war folgende:
onFormDestroy:
Delphi-Quellcode:
  case MessageDlg('wirklich neustarten?', mtConfirmation, [mbyes, mbno], 0) of
    mrYes:
      begin
        showmessage('yes');
      end;

    mrNo:
      begin
        showmessage('no');
        exit;
      end;
  end;
Leider ist der effekt gleich null, da das programm sich schließt, bevor ich die meldung wirklichzu sehen bekomme. gibt es eine möglichkeit, OnFormdestry aufzuhalten? oder kann ich das irgendwie anders abfangen?

Gruß Martin
  Mit Zitat antworten Zitat
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: OnFormDestroy Frage "wirklich schließen"

  Alt 14. Apr 2006, 10:27
Hallo!

OnDestroy wird dann aufgerufen, wenn es bereits zu spät ist, um es mal kurz zu sagen.
Probier mal OnCloseQuery.

NACHTRAG:
Delphi-Quellcode:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  if MessageDlg('Wollen Sie wirklich beenden?', mtConfirmation, [mbYes, mbNo], 0) = mrNo then
    CanClose := False;
end;
Grüße
Faux
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
Benutzerbild von ManuMF
ManuMF

Registriert seit: 11. Jul 2005
1.016 Beiträge
 
Delphi 6 Personal
 
#3

Re: OnFormDestroy Frage "wirklich schließen"

  Alt 14. Apr 2006, 10:40
@faux: Der Dialog könnte evtl. anders geschlossen werden als mit Klick auf "Nein". Deshalb ist es hier meiner Meinung nach besser, das "Ja" abzufragen:

Delphi-Quellcode:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  CanClose := MessageDlg('Wollen Sie wirklich beenden?', mtConfirmation, [mbYes, mbNo], 0) = mrYes;
end;
Gruß,
ManuMF
Gruß,
ManuMF

Endlich hab ich was Positives an Vista entdeckt: Das mitgelieferte Mahjongg
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#4

Re: OnFormDestroy Frage "wirklich schließen"

  Alt 14. Apr 2006, 10:40
...und wenn ich im MessageDialog auf das "x" klicke, wird das Hauptformular ebenfalls geschlossen

Die Abfrage sollte man besser so formulieren:

Delphi-Quellcode:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  if MessageDlg('Wollen Sie wirklich beenden?', mtConfirmation, [mbYes, mbNo], 0) <> mrYes then
    CanClose := False;
end;
Gruß Hawkeye

//Edit: @ManuMF: gleiche Idee, aber kleiner Fehler

//Edit2: Mein Fehler
  Mit Zitat antworten Zitat
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: OnFormDestroy Frage "wirklich schließen"

  Alt 14. Apr 2006, 10:44
Mache es so, wie ManuMF es vorschlug, so gehts.
Oder so:

Delphi-Quellcode:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  CanClose := False;
  if MessageDlg('Wollen Sie wirklich beenden?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
    CanClose := True;
end;
Bleibt im Sinne egal, jenachdem wie man will. Ich bevorzuge eher ManuMF's Methode.

Grüße
Faux
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#6

Re: OnFormDestroy Frage "wirklich schließen"

  Alt 14. Apr 2006, 10:54
Wenn man Formulare vererbt, kann es aber zu Problemen führen, wenn CanClose immer gesetzt wird:

Delphi-Quellcode:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  // geerbter Aufruf
  inherited;
  // überschreibt eine Einstellung im geerbten Aufruf
  CanClose := MessageDlg('Wollen Sie wirklich beenden?', mtConfirmation, [mbYes, mbNo], 0) = mrYes;
end;
Beim Aufruf der Routine aus der VCL heraus enthält die Variable CanClose den Wert True. Man muß also lediglich mitteilen, daß man das Schließen verhindern möchte.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#7

Re: OnFormDestroy Frage "wirklich schließen"

  Alt 14. Apr 2006, 16:35
Wenn man vererbt, dann überschreibt man aber nicht die Eventhandler sonder die Methode der Form, die es aufruft, also die CloseQuery im Public Bereich von TCustomForm. Dann ist es schnurz egal wer nun in welcher Instanz sich einen Handler für das OnCloseQuery Event zugewiesen hat (vor allem: welcher der x Zuweisungen zuletzt drinne hängen geblieben ist, da sie sich ja gegenseitig rausschmeissen).

Wenn also ein Formular später mal abgeleitet werden kann, dann die CloseQuery Methode überschreiben - und vor allem kann man dann auch mit Inherited arbeiten...
  Mit Zitat antworten Zitat
happyaura

Registriert seit: 12. Jan 2005
Ort: Hamburg
73 Beiträge
 
Delphi 6 Personal
 
#8

Re: OnFormDestroy Frage "wirklich schließen"

  Alt 14. Apr 2006, 19:38
besten Dank, sowas hab ich gesucht. nun funktioniert auch meine anwendung:
Delphi-Quellcode:
    
case MessageDlg('Sollen beim Schließen die Einstellungen gespeichert werden?', mtConfirmation, [mbyes, mbno, mbcancel], 0) of

    mrYes:
      begin
//sensordaten speichern
        CanClose := true;
      end;

    mrNo:
      begin
//sensordaten nicht speichern
        CanClose := true;
      end;

    else
      begin
//abbrechen....
        CanClose := false;
      end;
  end;//case
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:05 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