Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Timer starten nach schließen mit caHide (https://www.delphipraxis.net/125296-timer-starten-nach-schliessen-mit-cahide.html)

peter314 3. Dez 2008 20:07


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:
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;
Danke im voraus
peter

p.s. ich weiß leider nicht welche Programmiersprache ich benutze, dass wird in der Schule einfach so beigebracht

SirThornberry 3. Dez 2008 20:11

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.

DeddyH 3. Dez 2008 20:11

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 3. Dez 2008 20:12

DP-Maintenance
 
Dieses Thema wurde von "SirThornberry" von "Sonstige Fragen zu Delphi" nach "VCL / WinForms / Controls" verschoben.

peter314 3. Dez 2008 22:19

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

DeddyH 4. Dez 2008 08:00

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.

nahpets 4. Dez 2008 09:35

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.

peter314 4. Dez 2008 12:07

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:

Ist Form1 das Hauptformular der Anwendung?
Was meinst du mit Hauptformular?
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.

nahpets 4. Dez 2008 12:18

Re: Timer starten nach schließen mit caHide
 
Hallo,

beendet sich das Programm, wenn Du Button1 anklickst?
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
Form1.Close;
end;
Ist Form1 das erste Formular, das im Projekt erstellt wird?
Delphi-Quellcode:
begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
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.
Warum willst Du einen Timer benutzen, könntest Du die Logik aus der Timerroutine nicht genausogut im FormClose ausführen lassen?

peter314 4. Dez 2008 13:05

Re: Timer starten nach schließen mit caHide
 
Zitat:

Wenn es so aussieht
Sieht genauso aus.

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.
Seite 1 von 2  1 2      

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