Autor Beitrag
walter_b
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 135

Windows Vista/XP
Delphi 6
BeitragVerfasst: Di 18.03.08 22:21 
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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 135

Windows Vista/XP
Delphi 6
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: 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..