AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

CanClose

Ein Thema von Luki206 · begonnen am 2. Dez 2013 · letzter Beitrag vom 2. Dez 2013
Antwort Antwort
Seite 1 von 2  1 2      
Luki206
(Gast)

n/a Beiträge
 
#1

CanClose

  Alt 2. Dez 2013, 17:21
Hi,
ich habe folgendes Problem: ich möchte das bei OnClose meines Fensters eine Überprüfung machen ob das Fenster wirklich geschlossen werden sollte, nur klappt das nicht ganz.. Ich muss dazu sagen ich möchte das wenn der Benutzer, ja wählt, das eine kleine .txt Datei erstellt werden soll. Bis jetzt sieht das ganze so aus:
Delphi-Quellcode:
procedure TFrmHaupt.FormClose(Sender: TObject; var Action: TCloseAction);
var
sl : TStringList;
s, d, z: String; mr: Integer; CanClose: Boolean;
begin
 mr := MessageDlg('Wirklich schließen???',mtConfirmation,[mbYes,mbNo],0);
   if mr = mrYes {mrNo} then begin
   if LblGesammt.Caption = '0then begin
   MessageDlg('Es konnte kein Gesammt Protokoll angelegt werden, da keine Waffeln gebucht worden sind.', mtWarning, [mbOK], 0);
   CanClose := true;
   end else begin
   d := DateToStr(date);
   z := System.SysUtils.FormatDateTime('"Gesammt Protokoll " hh-nn-ss dd, mm, yyyy' , (Now));
   s := (LblGesammt.Caption);
   sl:=TStringList.Create;
   try
     sl.Add('Es wurden '+s+' Waffeln produziert und verkauft.');
     sl.SaveToFile('c:\ProgramData\Crepesworker\Protokoll '+d+'\'+z+'.txt');
   finally
     sl.Free;
   end;
   end;
   CanClose := true;
end else
 CanClose := false;
end;
Das ganze dient eher nur zum 'spielen und experimentieren' als das es wirklich in gebrauch genommen wird
Danke
Gruß
Luki
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: CanClose

  Alt 2. Dez 2013, 17:23
Warum nimmst du nich den CloseQuery-Event?
Markus Kinzler
  Mit Zitat antworten Zitat
Luki206
(Gast)

n/a Beiträge
 
#3

AW: CanClose

  Alt 2. Dez 2013, 17:28
geht es damit besser?

Edit: Ok, mit CloseQuery geht es
  Mit Zitat antworten Zitat
Luki206
(Gast)

n/a Beiträge
 
#4

AW: CanClose

  Alt 2. Dez 2013, 17:37
Naja, jetzt ist nur das Problem: wie bekomme ich das in eine ButtonClick procedure? Weil irgendwie geht mein Fenster jetzt nicht zu wenn ich dann auf 'Ja' drück..
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.159 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: CanClose

  Alt 2. Dez 2013, 17:44
Zeig bitte nochmal deinen Quelltext wie er jetzt ist. Sowohl das OnCloseQuery-Event als auch das, was beim Druck auf deinen Button passiert.
  Mit Zitat antworten Zitat
Luki206
(Gast)

n/a Beiträge
 
#6

AW: CanClose

  Alt 2. Dez 2013, 17:50
OnCloseQuery:
Delphi-Quellcode:
procedure TFrmHaupt.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
sl : TStringList;
s, d, z: String; mr: Integer;
begin
 mr := MessageDlg('Wirklich schließen???',mtConfirmation,[mbYes,mbNo],0);
   if mr = mrYes {mrNo} then begin
   if LblGesammt.Caption = '0then begin
   MessageDlg('Es konnte kein Gesammt Protokoll angelegt werden, da keine Waffeln gebucht worden sind.', mtWarning, [mbOK], 0);
   CanClose := true;
   end else begin
   d := DateToStr(date);
   z := System.SysUtils.FormatDateTime('"Gesammt Protokoll " hh-nn-ss dd, mm, yyyy' , (Now));
   s := (LblGesammt.Caption);
   sl:=TStringList.Create;
   try
     sl.Add('Es wurden '+s+' Waffeln produziert und verkauft.');
     sl.SaveToFile('C:\ProgramData\Waffelworker\Protokoll '+d+'\'+z+'.txt');
   finally
     sl.Free;
   end;
   end;
   CanClose := true;
end else
 CanClose := false;
end;
Button (Action):
Delphi-Quellcode:
procedure TFrmHaupt.ActBeendenExecute(Sender: TObject);
var
sl : TStringList;
s, d, z: String; mr: Integer; CanClose: Boolean;
begin
 mr := MessageDlg('Wirklich schließen???',mtConfirmation,[mbYes,mbNo],0);
   if mr = mrYes {mrNo} then begin
   if LblGesammt.Caption = '0then begin
   MessageDlg('Es konnte kein Gesammt Protokoll angelegt werden, da keine Waffeln gebucht worden sind.', mtWarning, [mbOK], 0);
   CanClose := true;
   end else begin
   d := DateToStr(date);
   z := System.SysUtils.FormatDateTime('"Gesammt Protokoll " hh-nn-ss dd, mm, yyyy' , (Now));
   s := (LblGesammt.Caption);
   sl:=TStringList.Create;
   try
     sl.Add('Es wurden '+s+' Waffeln produziert und verkauft.');
     sl.SaveToFile('C:\ProgramData\Waffelworker\Protokoll '+d+'\'+z+'.txt');
   finally
     sl.Free;
   end;
   end;
   Close;
end else
 CanClose := false;
end;
Es ist beides fast identisch aber es geht nicht..

Geändert von Luki206 ( 2. Dez 2013 um 18:14 Uhr)
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#7

AW: CanClose

  Alt 2. Dez 2013, 18:25
In dein Beenden-Button-Ereignis schreibst du einfach rein: Close;

In deinem OnCloseQuery-Ereignis, das beim Versuch, ein Formular zu schließen, ausgelöst wird, schreibst du rein, unter welchen Bedingungen das Formular geschlossen werden darf, z.B.:

Delphi-Quellcode:
procedure TFrmHaupt.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  CanClose := Dialogs.MessageDlg('Wirklich schließen???',mtConfirmation,[mbYes,mbNo],0) = mrYes;
end;
Im Übrigen stellt der Hinweis "es geht nicht" keine Fehlermeldung dar und läßt auch keine Schlüsse zu, was denn genau nicht geht. Aber das hat man dir gefühlt schon hundert Mal erklärt, doch du weigerst dich weiterhin, ordentliche Fehlerbeschreibungen zu formulieren. Was ist denn daran so schwer zu begreifen???

Zu guter Letzt möchte ich noch darauf hinweisen, daß die Boolean-Variable CanClose eine lokale Variable von CloseQuery ist und im Close-Ereignis keinen Sinn macht.

Geändert von Perlsau ( 2. Dez 2013 um 18:30 Uhr)
  Mit Zitat antworten Zitat
Luki206
(Gast)

n/a Beiträge
 
#8

AW: CanClose

  Alt 2. Dez 2013, 18:30
Ich habe jetzt das einmal so gemacht wie du es gesagt hast, nur zeigt er mir zwei mal die Überprüfung ob das Fenster geschlossen werden sollte. Wie so kommt das jetzt so zu Stande und wie kann ich es machen damit es wirklich nur einmal erscheint?

Edit: wenn ich eine Fehlermeldung bekommen würde, hätte ich das schon erwähnt nur die Software läuft ja und nur an dieser Stelle macht er mir dann nichts wenn ich den Button drücke bzw. es wird nur die Message Box angezeigt

Geändert von Luki206 ( 2. Dez 2013 um 18:32 Uhr)
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#9

AW: CanClose

  Alt 2. Dez 2013, 18:39
Dein Programm macht genau das, was du programmierst: Wenn du in deinem ButtonClick-Ereignis und in CanClose die Abfrage machst, ob das Programm geschlossen werden soll, dann erscheint die Abfrage auch zweimal. Das heißt, du hast es eben nicht so gemacht, wie von mir vorgeschlagen: Im Button-Ereignis steht nur: Close; drin. Alles andere regelst du in OnCloseQuery. Am besten du machst dir eine private Procedure, wo du alles reinschreibst, was beim Programmende ausgeführt werden soll. Drückt der Anwender dann Yes bei der Abfrage in CloseQuery, ob wirklich beendet werden soll, rufst du diese Procedure auf und setzt danach CanClose (in CloseQuery) auf True. Drückt der Anwender No, wird nichts ausgeführt, CanClose wird nicht auf True gesetzt und dein Programm läuft weiter.

Was genau verstehst du denn jetzt daran nicht?

Code gibt's diesmal keinen.

Eine Fehlerbeschreibung muß nicht zwingend eine Compilermeldung sein, sondern kann, wie von dir eben formuliert, auch eine Beschreibung des unerwünschten Verhaltens sein. Dagegen sagt "geht nicht" überhaupt nichts aus und ermöglicht auch keine Hilfestellung, ohne dir wieder alles aus der Nase ziehen zu müssen.
  Mit Zitat antworten Zitat
Luki206
(Gast)

n/a Beiträge
 
#10

AW: CanClose

  Alt 2. Dez 2013, 18:46
Jetzt geht es. ButtonClick = nur Close.
Danke.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 06:16 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