Hallo allerseits
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:
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;
Natürlich ist der Sinn nicht die Zahl im Label zu erhöhen. Die eigentlich Funktion kommt da später erst
Das Starten der Timer funktioniert wunderbar, aber wenn ich auf Stop(Button2) klicke kommt folgender Fehler:
Code:
Access Violation at Adress 00401C52 in Module 'Project2.exe'. Write of adress 004276A4
Was mach ich da falsch?
Chuck Norris has counted to infinity ... twice!