Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Klassenproblem...


Nagelbrett - Sa 10.05.03 15:46
Titel: Klassenproblem...
also ich hab eine Klasse, in die ich einen Timer eingebaut habe..:

Quelltext
1:
2:
3:
4:
type TKlasse = class
  KlasseTimer: TTimer;
  procedure TimerKlasseTimer(Sender: TObject);
end;

jede instanz der klasse hat also quasi ihren eigenen timer
und das ganze als array angelegt:

Quelltext
1:
Blubb: Array[0..50] of TKlasse;                    

wenn die Klasse dann erzeugt wird (und der Timer), wird jedem timer auch ein gleiches OnTimer event zugewiesen...
wenn nun dieser timer abgelaufen ist und die procedure TKlasse.TimerKlasseTimer aufgerufen wird, wie kann ich dann innerhalb dieser prozedur herausfinden, von welcher array-instanz von "Blubb" der timer ausgelöst wurde? (mit dieser soll nämlich dann etwas gemacht werden.. aber irgendwie muss ich ja auf sie verweisen können)

ist das überhaupt möglich, oder muss ich da irgendwie anders rangehn?


Christian S. - Sa 10.05.03 16:03

Kannst Du in der Eigenschaft "Tag" eines jeden Timers nicht den Index hinterlegen, den die Instanz im Array hat?


Nagelbrett - Sa 10.05.03 16:08

hmm, tatsächlich, das wäre eine möglichkeit

danke :D


Nagelbrett - Sa 10.05.03 16:23

hm, mal noch eine dumme frage...:

wie kann ich schaun ob schon eine gewisse array-instanz "Blubb[x]" vorhanden ist, oder ob die mit index x noch frei ist? weil wenn's die noch nicht gibt und man versucht darauf zuzugreifen bekommt man ja eine accessviolation
gibts da irgend einen befehl? oder muss ich das mit ...fehlerbehandlung machen?


Christian S. - Sa 10.05.03 16:35

Zitat:
hm, mal noch eine dumme frage...:
Die gibt es nicht.

Es sollte mit

Quelltext
1:
if Blubb[x] <> nil then                    

gehen.


Nagelbrett - Sa 10.05.03 20:55

jup, das klappt, thx


Udontknow - Mo 12.05.03 10:06

Hi!

Eine kleine Anmerkung:
Wenn du deine Klasse von TComponent ableitest, kannst du den Timer ja mit Timer:=TTimer.Create(self) erstellen. Damit ist dann also dein Objekt der Owner des Timers. Du kannst dann im OnTimer-Ereignis dein objekt ohne vorherige Tagzuweisung bestimmen, indem du auf den Owner zugreifst: TKlasse(TTimer(Sender).Owner).

Cu,
Udontknow