Autor Beitrag
grisu81
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Mi 23.07.03 19:17 
Hallo zusammen.

Ich bin ncoh ein ziemlicher Delphi-Anfänger und habe folgende Frage: Ich möchte in meinem Programm Timer zur Laufzeit erschaffen. Die Anzahl ist jeweils von den Benutzeraktionen abhängig.

Wie erzeuge ich die Timer mit von mir vorgegebenen Namen am besten und wo "speichere" ich sie? In einer Liste etc.?

Und wie weise ich diesen Timer zu, was sie ausführen sollen, wenn das OnTimer-Ereignsi eintritt?

Danke für Eure Hilfe!
Gruss
grisu81
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Do 24.07.03 09:46 
Hallo!

eine Komponente kannst du wie folgt dynamisch zur Laufzeit erstellen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
Var
  NewTimer: TTimer;
Begin
  NewTimer := TTimer.Create (Nil);  // Nil oder z. b. Form1 oder self
  NewTimer.Interval := 1000;
  NewTimer.Enabled := True;
  NewTimer.OnTimer := DoTimer;
End;

DoTimer ist eine Procedure die aufgerufen wird wenn der festgelegte Zeitabschnitt verstrichen ist.

Da du ja mehrere Timer hast könntest du diese in ein TList-Objekt verwalten. Dazu erstellst du ganz am Anfang (z. b. im OnCreate Event der Form) die TList:
ausblenden Delphi-Quelltext
1:
fList: TList.Create;					

Wenn du dann einen neuen Timer erstellst dann fügst du den Pointer auf die Instance in die Liste hinzu:
ausblenden Delphi-Quelltext
1:
fList.Add (NewTimer);					

Beim Beenden der Anwendung musst du aber die Timer wieder freigeben (z. B. im OnDestroy Event);
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
Var
  Idx: Integer;
Begin
  For Idx := fList.Count -1 DownTo 0 Do
    TTimer (fList [Idx]).Free;
End;


Gruß
Tino
grisu81 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Do 24.07.03 10:22 
Herzlichen Dank!
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Do 24.07.03 11:21 
grisu81 hat folgendes geschrieben:
Herzlichen Dank!

Gerne :-D
grisu81 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Do 24.07.03 12:48 
Für mich tut sich da gerade ein Problem auf:

Ich erstelle die Prozedur DoTimer;
ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure DoTimer(Sender: TObject);
begin
{ mach irgendwas }
end;

Bei dieser Zuweisung
ausblenden Delphi-Quelltext
1:
 NewTimer.OnTimer := DoTimer;					

erhalte ich dann aber beim Compilieren die Meldung
Delphi hat folgendes geschrieben:
Inkompatible Typen: Methodenzeiger und reguläre Prozedur

Woran kann das liegen?

Gruss
grisu81

Moderiert von user profile iconTino: Delphi-Tags hinzugefügt.
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Do 24.07.03 13:03 
Hallo!

Das liegt daran das das Ereignis OnTimer eine Methode erwartet und keine normale Procedure.

Der Unterschied ist der das eine Methode in einer Klasse definiert ist. Also zum Beispiel Bestandteil der Form Klasse:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
type
  TForm1 = Class (TForm);
    {...}
    private
      Procedure DoTimer (aSender: TObject);
    {...}
    End;

{...}

procedure Form1.DoTimer(Sender: TObject); 
begin 
  { mach irgendwas } 
end;

Dann sollte es funktionieren.

Gruß
Tino