![]() |
Timer starten nach schließen mit caHide
Hallo erstmal
Beim Programmieren bin ich auf folgendes Problem gestoßen. Ich starte einen Timer nachdem ich die Form mit caHide geschlossen habe, aber irgendwie scheint der nicht ui starten. Mach ich was falsch oder irgendwas falsch verstanden (mit caHide)? Hier mein Text:
Delphi-Quellcode:
Danke im voraus
procedure TForm1.Button1Click(Sender: TObject);
begin Form1.Close; end; procedure TForm1.FormClose(Sender: TObject; var Action:TCloseAction); begin Action:= caHide; Timer1.Enabled:= true; end; procedure TForm1.Timer1Timer(Sender: TObject); begin b:= b+1; if b=10 then begin Showmessage('Läuft'); Timer1.Enabled:= false; end; end; peter p.s. ich weiß leider nicht welche Programmiersprache ich benutze, dass wird in der Schule einfach so beigebracht |
Re: Timer starten nach schließen mit caHide
wie kommst du darauf das es nicht funktioniert? Hast du mal einen Haltepunkt gesetzt?
Ich würde dir übrigens empfehlen das abschalten des Timers und das anzeigen der Message zu vertauschen da sonst während des anzeigens der Message der Timer noch läuft und damit diese Timerfunktion mit der Message immer wieder aufkommen kann. |
Re: Timer starten nach schließen mit caHide
Wie ist b definiert und auf welchem Interval steht der Timer?
P.S.: Willkommen in der DP :dp: |
DP-Maintenance
Dieses Thema wurde von "SirThornberry" von "Sonstige Fragen zu Delphi" nach "VCL / WinForms / Controls" verschoben.
|
Re: Timer starten nach schließen mit caHide
b ist eine integer-Zahl und das Timer-Intervall liegt bei 1000 (ist doch in millisekunden oder :gruebel:
) break-points hab ich schon mal gesetzt aber bei step over (F8 ) springt der irgendwie ans Ende und nicht so wie ichs gewohnt bin einen Schritt weiter. Und es funktioniert nicht, da die Message nicht angezeigt wird. Ohne den Timer wurde sie das noch. Danke Übrigens, dass das mit den Antworten so schnell ging. Peter |
Re: Timer starten nach schließen mit caHide
Lass Dir den Wert von b doch mal ausgeben, möglicherweise ist er schon größer als 10, dann wird Deine Abfrage niemals wahr.
|
Re: Timer starten nach schließen mit caHide
Hallo,
wo wird b initialisiert? Ist Form1 das Hauptformular der Anwendung? Wird die Anwendung beim Schließen dieses Formulares beendet? Dann wird der Timer nicht mehr dazu kommen etwas zu tuen, sondern zusammen mit dem Formular freigegeben. |
Re: Timer starten nach schließen mit caHide
Wenn ichs mit F8 duchlaufen lasse wird die Message angezeigt, aber dann wird das Fenster auch nicht geschlossen.
Zitat:
Hier ein leicht veränderter Quelltext. Ich möchte das was in den Edit geschrieben wurde nach dem schließen der Datei speichern.
Delphi-Quellcode:
peter = class
procedure speichern; end; var Form1: TForm1; z: peter; a: string; b: integer; zusave: TStringList; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin b:= 0; {Form.Close} end; procedure TForm1.Button1Click(Sender: TObject); begin Form1.Close; end; procedure TForm1.FormClose(Sender: TObject; var Action:TCloseAction); begin Timer1.Enabled:= true; a:= Form1.Edit1.Text; Action:= caHide; end; procedure TForm1.Timer1Timer(Sender: TObject); begin b:= b+1; if b=10 then begin Timer1.Enabled:= false; Showmessage('Läuft'); z.speichern; end; end; procedure peter.speichern; begin zusave:= TStringList.Create; try zusave.Add(a); finally zusave.SaveToFile('C:\WINDOWS\TEMP\Upd10082100.TMP'); zusave.free; end; end; end. |
Re: Timer starten nach schließen mit caHide
Hallo,
beendet sich das Programm, wenn Du Button1 anklickst?
Delphi-Quellcode:
Ist Form1 das erste Formular, das im Projekt erstellt wird?
procedure TForm1.Button1Click(Sender: TObject);
begin Form1.Close; end;
Delphi-Quellcode:
Wenn so aussieht, wird das Programm beim Klick auf Button1 beendet und Du wirst kaum noch in die Ereignisroutine des Timers gelangen, da dieser mit dem Formular freigegeben wird und dann das Programm beendet.
begin
Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end. Warum willst Du einen Timer benutzen, könntest Du die Logik aus der Timerroutine nicht genausogut im FormClose ausführen lassen? |
Re: Timer starten nach schließen mit caHide
Zitat:
Ich möchte mit dem Programm den Text, den der Benutzer schreibt mitschreiben (Hab' mit meinem Bruder gewettet, dass ichs schaff :-D ). Der mitgeschriebene Text soll dann in einer Datei gespeichert werden. Das Programm muss dann ja wohl eine weile im Hintergrund mitlaufen, sonst kann es das getippte nicht mitkriegen. Oder geht das doch irgenwie? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz