![]() |
TTimer zur Laufzeit erstellen/entfernen
Hallo allerseits :hi:
Also Folgendes. Ich habe ein Programm welches mit einer ziemlich langen for Schleife arbeitet. Das dumme ist natürlich jetzt, dass man die Form in der Zeit nicht kontrollieren kann bzw. überhaupt nichts machen kann. Also hab ich mir gedacht nehm ich 100 Timer. Folgender Code :
Delphi-Quellcode:
Natürlich ist der Sinn nicht die Zahl im Label zu erhöhen. Die eigentlich Funktion kommt da später erst :zwinker:
type
TForm1 = class(TForm) Button1: TButton; Button2: TButton; Label1: TLabel; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private TimerArray: Array of TTimer; procedure Count(Sender: TObject); public { Public declarations } end; var Form1: TForm1; Timer: TTimer; implementation {$R *.dfm} procedure TForm1.Count(Sender: TObject); begin Label1.Caption := IntToStr(StrToInt(Label1.Caption) + 1) end; procedure TForm1.Button1Click(Sender: TObject); var i: Integer; begin SetLength(TimerArray,100); For i := 1 to 100 do begin TimerArray[i] := TTimer.Create(self); With TimerArray[i] do begin Enabled := True; Interval := 1; OnTimer := Count; end; end; Button1.Enabled := False; Button2.Enabled := True; end; procedure TForm1.Button2Click(Sender: TObject); var i: Integer; begin SetLength(TimerArray,100); For i := 1 to 100 do TimerArray[i].Enabled := False; For i := 1 to 100 do TimerArray[i].Free; Button1.Enabled := True; Button2.Enabled := False; end; Das Starten der Timer funktioniert wunderbar, aber wenn ich auf Stop(Button2) klicke kommt folgender Fehler:
Code:
Was mach ich da falsch?
Access Violation at Adress 00401C52 in Module 'Project2.exe'. Write of adress 004276A4
|
Re: TTimer zur Laufzeit erstellen/entfernen
Und zum wasweissichwievielten mal(:zwinker:): Dynamische Arrays beginnen bei 0 und gehn bis Laenge-1, also in deinem Fall von 0..99
Greetz alcaeus |
Re: TTimer zur Laufzeit erstellen/entfernen
Dabei hab ich mir das heut Mittag nochmal angeschaut :oops:
Klappt! Danke :thumb: |
Re: TTimer zur Laufzeit erstellen/entfernen
Hi,
wenn ein Prog während einer Schleife nicht reagiert sollte man lieber Application.ProcessMessages; benutzen... cu, sECuRE |
Re: TTimer zur Laufzeit erstellen/entfernen
Zitat:
Greetz alcaeus |
Re: TTimer zur Laufzeit erstellen/entfernen
Zitat:
Zitat:
|
Re: TTimer zur Laufzeit erstellen/entfernen
Vor allem wenn es darum geht, nur den Status zu aktualisieren reicht das völlig aus.
Ganz davon zu schweigen davon, das 100 Timer mit einem Interval von 1 ein ganz schönes Chaos anrichten können.
Delphi-Quellcode:
PS: Wenn die Schleife sehr schnell durchläuft, sollte man eventuell den Aufruf der beiden Zeilen einsschränken, z.B. etwa so:
for i := 1 to 12345 do
begin // ... Label1.Caption := IntToStr(StrToInt(Label1.Caption) + 1) Application.ProcessMessages; end;
Delphi-Quellcode:
If (i mod 10) = 0 then
|
Re: TTimer zur Laufzeit erstellen/entfernen
Zitat:
Als Alternative zu Application.ProcessMessages sollte man evtl. noch einen Thread erwähnen... Greetz alcaeus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:56 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