Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - CanClose nach Timer auf True setzen


walter_b - Di 18.03.08 22:21
Titel: CanClose nach Timer auf True setzen
Hallo zusammen

Habe ein ähnliches Problem, wie es auch schon vorgekommen ist, allerdings habe ich keine passende Lösung für mich gefunden.

Folgende Situation:

Ich möchte, dass wenn man auf close klickt, dann der Timer auf true gesetzt wird, danach die procedure TForm1.Timer3Timer ausgeführt wird, und danach das Programm beendet wird.


Der aktuelle Programmcode:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
procedure TForm1.Timer3Timer(Sender: TObject);
begin
  if (form1.Width > 2AND (form1.Height > 2then begin
  form1.Width:=form1.Width-2;
  form1.Left:=form1.Left+1;
  form1.Top:=form1.Top+1;
  form1.Height:=form1.Height-2;
  end;
  if (form1.Top>800then begin
  schliessen:=true;
  end;
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  CanClose:=false;
  form1.Timer3.Enabled:=true;
// Wird jetzt leider direkt schon ausgeführt
  CanClose:=true;
end;


Wie schaff ich es, dass das CanClose:=true; wartet, bis der Timer auf false gesetzt ist?

Mit if (form1.timer3.enabled=false) hat es nicht funktioniert.


Xentar - Di 18.03.08 22:24

1. Schreib nicht überall form1. davor
2. Im CloseQuery setzt du CanClose auf False und startest den Timer. Wenn der Timer abgelaufen ist, setzt du dir eine Hilfvariable auf true, und rufst wieder ein close auf. Wenn diese Hilfvariable auf true steht, lässt due CanClose auf true.


walter_b - Di 18.03.08 22:42

user profile iconXentar hat folgendes geschrieben:
1. Schreib nicht überall form1. davor
2. Im CloseQuery setzt du CanClose auf False und startest den Timer. Wenn der Timer abgelaufen ist, setzt du dir eine Hilfvariable auf true, und rufst wieder ein close auf. Wenn diese Hilfvariable auf true steht, lässt due CanClose auf true.


Ah, cool, vielen Dank.

Noch kurz wegen dem form1: wenn ich gesamthaft 3 forms habe, dann brauche ich doch das form1, damit er erkennt, welches form ich meine, nicht?


Xentar - Di 18.03.08 22:44

Nope.
Die Prozedur, wo das drinsteht, gehört ja schon zu Form1
Damit greift er automatisch auf das Formular zu.

Kannst es dir also wieder abgewöhnen, da du damit an manchen Stellen sogar Probleme bekommen kannst.


wulfskin - Di 18.03.08 23:44

user profile iconXentar hat folgendes geschrieben:
Kannst es dir also wieder abgewöhnen, da du damit an manchen Stellen sogar Probleme bekommen kannst.
Beispiel bitte?


Xentar - Di 18.03.08 23:51

user profile iconwulfskin hat folgendes geschrieben:
user profile iconXentar hat folgendes geschrieben:
Kannst es dir also wieder abgewöhnen, da du damit an manchen Stellen sogar Probleme bekommen kannst.
Beispiel bitte?


Wenn man mehrere Objekte einer Klasse hat, aber innerhalb der Klasse auf ein bestimmtes Objekt zugreift, statt das "aufrufende".
Kommt bei Formularen wohl seltener vor, aber bei Frames / normalen Klassen.

Weiß grad nicht, wie ich das ausdrücken soll..