AGB  ·  Datenschutz  ·  Impressum  







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

OnTimer und Programm beenden

Ein Thema von Bea · begonnen am 4. Okt 2007 · letzter Beitrag vom 5. Okt 2007
 
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
 


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 05:22 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