![]() |
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? |
Nimm eine Boolean-Variable
Delphi-Quellcode:
wenn du speicherst setzt du sie auf True.
Saved : Boolean;
Beim OnChange setzt, setzt du sie auf False. Und beim Beenden fragst du dann wenn False ist ob man speichern soll. Gruss Mirilin |
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. |
Hi,
etwa so?
Delphi-Quellcode:
musst halt nur das OnCloseQuery-Event von dem Form auf FormCloseQuery einstellen...
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; |
Vielen Dank für die schnelle Antwort, werde es morgen gleich mal ausprobieren.
|
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:
Aber da passiert nichts.
Form2.CloseQuery
Ich glaub ich muß noch viel lernen. |
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 |
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:
Und fürs Setzen:
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;
Delphi-Quellcode:
[edit=Daniel B]Delphi-Tags eingefügt. MfG Daniel B.[/edit]
procedure TForm2.Edit1Change(Sender: TObject);
begin Saved:= False; end; |
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 |
: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 10:12 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 by Thomas Breitkreuz