Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Bei Beenden von Form prüfen ob Daten schon gespeichert s (https://www.delphipraxis.net/5284-bei-beenden-von-form-pruefen-ob-daten-schon-gespeichert-s.html)

Albi 31. Mai 2003 08:05


Bei Beenden von Form prüfen ob Daten schon gespeichert s
 
Kann mir jemand helfen, ich hätte gern in meinem Prog eine Abfrage, die überprüft, ob die Daten schön gespeichert sind. Sprich ich gebe etwas ein und drücke Beenden, nun sind die Daten ja noch nicht gespeichert und es soll ne Meldung kommen.

Ich habe es mit der Abfrage über die Felder versucht aber das geht ja nicht, da die Felder nach dem speichern nicht leer sind.

Kann mir jemand nen Tipp geben?

Mirilin 31. Mai 2003 08:37

Nimm eine Boolean-Variable
Delphi-Quellcode:
Saved : Boolean;
wenn du speicherst setzt du sie auf True.
Beim OnChange setzt, setzt du sie auf False.
Und beim Beenden fragst du dann wenn False ist ob man speichern soll.

Gruss Mirilin

czapie 31. Mai 2003 10:20

Du mußt dann bloß noch dafür sorgen, dass das Programm auch wirklich nicht beendet wird.
Also nicht dass dann irgendein Hinweis/Dialog was auch immer kommt, aberschwups dann ist das Prog auf einmal weg.

Czapie.

Basic-Master 31. Mai 2003 12:42

Hi,
etwa so?
Delphi-Quellcode:
uses ... , dialogs, ...

type
  TForm1 = class(TForm)
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    saved:boolean;
  end;

...
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if not saved then begin
  if messagedlg('Es wurde nicht gespeichert. Trotzdem beenden?', mtconfirmation, [mbyes, mbno], -1) = mryes then
  canclose := true
  else
  canclose := false;
end;
end;
musst halt nur das OnCloseQuery-Event von dem Form auf FormCloseQuery einstellen...

Albi 31. Mai 2003 19:35

Vielen Dank für die schnelle Antwort, werde es morgen gleich mal ausprobieren.

Albi 1. Jun 2003 09:34

Habe das mal ausprobiert, nun komme ich aber wieder nicht weiter. Wie rufe diese auf, so das, wenn ich auf schließen klicke diese FormQueryClose kontrolliert wird. Ich es versucht mit

Code:
Form2.CloseQuery
Aber da passiert nichts.

Ich glaub ich muß noch viel lernen.

CalganX 1. Jun 2003 09:45

Hi,
die Funktion Form1CloseQuery muss im Objektmanager eingetragen werden unter Ereignisse->OnCloseQuery (falls du das nicht gemacht hast).
Des Weiteren ruft das Formular OnCloseQuery vor dem Beenden selber auf. Das heißt, du brauchst das nicht manuell aufrufen.

Falls das alles immer noch nicht funktioniert, gestatte mir eine Frage: hast du Variable beim verändern auf false und beim speichern auf true gesetzt?

Chris

Albi 1. Jun 2003 09:57

end;Ich denke mal ich habe an alles gedacht. Ich habe in meine beiden Edit Felder ein OnChange eingebaut (Saved:= False bzw. True) und habe auch auf dem Form2 das onCloseQuery Ereignis eingetragen aber wenn ich dann das Form beende, schließt er es einfach ganz normal.

Hier mal der Code

Delphi-Quellcode:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if not saved then begin
if Saved then begin
  if MessageDlg('Es wurde nicht gespeichert. Trotzdem beenden?', mtconfirmation, [mbyes, mbno], -1) = mryes then
  CanClose := true
   else
   CanClose := false;
end;
Und fürs Setzen:

Delphi-Quellcode:
procedure TForm2.Edit1Change(Sender: TObject);
begin
 Saved:= False;
end;
[edit=Daniel B]Delphi-Tags eingefügt. MfG Daniel B.[/edit]

Mirilin 1. Jun 2003 12:34

Delphi-Quellcode:
procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
const
  s = 'Änderungen sind nicht gespeichert, vor dem Beenden speichern?';
begin
  if not Saved then
  begin
    CanClose := True;
    case MessageDlg(s,mtConfirmation,[mbYes,mbNo,mbCancel],0) of
      mrYes   : Save; //Save wäre Speicerprozedur...
      mrCancel : CanClose := False;
    end;
  end;
end;

Gruss Mirilin

Albi 1. Jun 2003 18:19

:bounce2: Super jetzt funktioniert es genau so wie das haben wollte, vielen Dank und ich habe wieder was dazu gelernt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:51 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