Einzelnen Beitrag anzeigen

Bea

Registriert seit: 23. Dez 2004
53 Beiträge
 
RAD-Studio 2009 Ent
 
#1

OnTimer und Programm beenden

  Alt 4. Okt 2007, 10:19
Hallo,
ich hab ein Programm, welches sich nach dem Start mit der Komponente CoolTrayIcon in den Tray minimiert.
Mit einem Linksklick auf das Icon zeige ich mein Programm am Bildschirm an.
Mit einem Rechtsklick auf das Icon wird ein Kontexmenü mit dem Button "Beenden" sichtbar
und beim Klick auf das "Beenden" soll das Programm auch richtig beendet werden.
Das klappt auch soweit erstmal.
Nun mein Problem:
Mein Programm enthält einen Timer, der z. B. alle 5 Sekunden eine Schleife ausführt.
Klicke ich nun rechts auf meinen Beenden-Button im Tray um das Programm zu beenden,
wird beim Debuggen das OnTimer-Ereignis auch nocheinmal durchlaufen und dann passiert gar nichts,
erst wenn ich ein zweites Mal darauf geklickt habe, wird mein Programm beendet.
Woran kann das liegen?
Wieso wird das OnTimer- Ereignis nochmals durchlaufen, obwohl ich im Beenden1Click den Timer1.Enabled:=False gesetzt habe?
Und wieso wird das Programm dann nicht gleich beendet?

Hier ein paar vereinfachte Quelltextausschnitte:
Delphi-Quellcode:
// ONTIMER-EREIGNIS
procedure TForm_Connector.Timer1Timer(Sender:TObject);
begin
 Timer1.Enabled:= False; // Timer erstmal ausschalten und die Verzeichnis abarbeiten
 if bBeenden=False then
 begin
   ...
  // hier wird nun verschiedenes Zeug abgearbeitet
  // z. B. alle Dateien eines Verzeichnisses in ein anderes Verzeichnis verschieben

  Timer1.Enabled:= True; // Timer nun wieder einschalten
 end;
end;

// BEENDEN-KLICK
procedure TForm_Connector.Beenden1Click(Sender:TObject);
begin
 Timer1.Enabled:=False;
 bBeenden:= true;
 ExplicitClose:= True; // Programm soll richtig beendet werden
 self.close;
end;

// PROGRAMM IN DEN TRAY MINIMIEREN
procedure TForm_Connector.Fensterschlieen1Click(Sender:TObject);
begin
 ExplicitClose:= False;
 // Programm soll nicht beendet werden, sondern nur wieder im Tray verschwinden
 self.close;
end;

// PROGRAMM IN DEN TRAY MINIMIEREN ODER BEENDEN
procedure TForm_Connector.FormCloseQuery(Sender:TObject;
 var CanClose:Boolean);
begin
 if ExplicitClose then
  begin
   CanClose:= True;
   exit;
  end;
 // Programm soll nur über das MenüItem "Beenden" oder über das TrayIcon "Beenden" beendet werden
 // beim schließen des Fensters über das Kreuz der Form soll das Programm weiter im Tray laufen und nicht beendet werden
 CanClose:= False;
 CoolTrayIcon1.HideMainForm;
end;
Besten Dank im Vorraus!
CU Bea
  Mit Zitat antworten Zitat