Einzelnen Beitrag anzeigen

Benutzerbild von Rastaman
Rastaman

Registriert seit: 6. Jan 2005
Ort: Lübbecke
575 Beiträge
 
Turbo C++
 
#1

TTimer zur Laufzeit erstellen/entfernen

  Alt 20. Feb 2005, 20:02
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!
  Mit Zitat antworten Zitat