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