![]() |
Variable Timer
Hoffentlich is da der richtige Threadtitel...
Delphi-Quellcode:
Aufgerufen zum Beispiel mit:
type Timer = Array(*[1..40]*) of TTimer;
procedure FNummerTimerstart(NR: Integer); begin if Form1.RadioGroup1.itemindex =0 then Timer[NR].enabled := true; if Form1.RadioGroup1.itemindex =1 then begin Nr := Nr+10; Timer[NR].enabled := true; end; if Form1.RadioGroup1.itemindex =2 then begin Nr := Nr+20; Timer[NR].enabled := true; end; if Form1.RadioGroup1.itemindex =3 then begin Nr := Nr+30; Timer[NR].enabled := true; end; end;
Delphi-Quellcode:
Ich hab mich hieran orientiert:
FNummerTimerstart(2);
![]() Die Timer gibts aber schon. Zum Problem, dort werden eckige Klammern [] verwendet, bei mir gibts da eine Fehlermeldung:
Code:
Wenn ich jetzt normale Klammern () nehme:
[Fehler]: '(' erwartet, aber '[' gefunden
Code:
Was ist hier falsch? :wall:
[Fehler]: Record, Objekt oder Klassentyp erforderlich
|
Re: Variable Timer
Das verstehe ich ehrlich gesagt nicht. Die eckigen Klammern müssten eigentlich richtig sein. Allerdings wäre es wohl besser, wenn das statt einer Prozedur eine Methode Deines Formulars wäre.
|
Re: Variable Timer
Hallo,
nimm "var" anstelle von "type":
Delphi-Quellcode:
Denk auch daran, die Timer zu erzeugen.
var Timer: array(*[1..40]*) of TTimer;
Grüße |
Re: Variable Timer
Hi,
nenn den Typ mal z. B. TTimerArray. Und dann brauchst du eine Variable Timer vom Typ TTimerArray. Mfg FAlter |
Re: Variable Timer
Du hast keine Variable vom Typ Timer deklariert, sonden verwendest statt dessen den Typbezeichner, als wäre er eine.
Delphi-Quellcode:
...
var timers: Timer; begin timers[0] := humbug; end; |
Re: Variable Timer
Also nochmal im Ganzen:
Delphi-Quellcode:
Jetzt noch im OnCreate die Timer anlegen und OnDestroy wieder freigeben.
type
TTimerArray = array[1..10] of TTimer; TForm1 = class(TForm) ... private FTimerArray: TTimerArray; ... end; |
Re: Variable Timer
Und die Funktion kannst du auch ziemlich verkürzen:
Delphi-Quellcode:
type
TForm1 = class(TForm) RadioGroup1: TRadioGroup; private procedure FNummerTimerstart(NR: Integer); //.. end; implementation procedure TForm1.FNummerTimerstart(NR: Integer); begin case RadioGroup1.ItemIndex of 1: Inc(Nr, 10); 2: Inc(Nr, 20); 3: Inc(Nr, 30); end; {oder: Inc(Nr, RadioGroup1.ItemIndex * 10);} Timer[NR].Enabled := True; end; |
Re: Variable Timer
Zitat:
Zitat:
Zitat:
Zitat:
|
Re: Variable Timer
Ich vermute, du hast die Timer nicht erzeugt:
Delphi-Quellcode:
Grüße
for i := 0 to 39 do
begin Timer[i] := TTimer.Create(self); Timer[i].Interval := ... // ... end; Edit: "Interval" schreibt man mit einem "l". |
Re: Variable Timer
Die Timer sind aber auf dem Formular schon vorhanden.
|
Re: Variable Timer
Achso, wenn du die Timer dann ansprechen möchtest, müsstest du über
![]() Nachtrag: Dein Array ist im Prinzip dann überflüssig. Ansprechen kannst du sie so. Das setzt voraus, dass die Timer "Timer1", "Timer2", ... heißen. Sie müssen einen fortlaufenden Index besitzen.
Delphi-Quellcode:
FindComponent('Timer' + IntToStr(NR)) as TTimer).Enabled := ...
|
Re: Variable Timer
Zitat:
Delphi-Quellcode:
(FindComponent('Timer' + IntToStr(NR)) as TTimer).Enabled := false;
Fehlermeldungen des Compilers
Code:
[Fehler]: Undefinierter Bezeichner: 'FindComponent'
Code:
*bei Markierung zwischen TTimer).Enabled
[Fehler]: Operator ist auf diesen Operandentyp nicht anwendbar*
|
Re: Variable Timer
Ja genau, ich habe die erste Klammer vergessen, sorry. FindComponent ist in der Unit Classes definiert, die Delphi automatisch einbinden sollte (sie müsste in den uses stehen).
Bei mir funktioniert der Code. |
Re: Variable Timer
FindComponent ist nicht wirklich einfach so in Classes deklariert, sondern der Vorfahre der Klassen, die Komponenten beinhalten können ist in Classes deklariert. In diesem Fall soll wohl Form1.FindComponent() gemeint sein, was du in einer klassenlosen Funktion auch voll qualifizieren musst. Da das aber reichlich unschön, und an der OOP vorbei ist, empfehle ich die Funktion zu einer Methode deines Formulars zu machen. Dort wird implizit "self" referenziert, und du kannst unqualifiziert FindComponent() benutzen, bzw. sollte man es dort dann auch tunlichst!
|
Re: Variable Timer
Zitat:
Zitat:
:dp: Es ist schön wie schnell einem hier geholfen wird :thumb: |
Re: Variable Timer
Zitat:
|
Re: Variable Timer
Prozedur:
Delphi-Quellcode:
Methode:
procedure SayHello;
begin ShowMessage('Hello World'); end;
Delphi-Quellcode:
[edit] Zu langsam, dafür ausführlicher *gg* [/edit]
type
TFormWuppdi = class(TForm) ... private procedure SayHello; ... end; ... procedure TFormWuppdi.SayHello; begin ShowMessage('Hello World'); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:01 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 by Thomas Breitkreuz