Einzelnen Beitrag anzeigen

Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#10

Re: Hashtable in Delphi ? - vgl Jass

  Alt 6. Jul 2008, 02:20
Der Callback eines TTimers ist TTimer.OnTimer(Sender: TObject). Die Variable Sender enthält den Pointer auf das auslösende Objekt, in diesem Fall eben den entsprechenden Timer, worüber du ihn ohne weitere Mittel identifizieren kannst.

Timer und Lables haben übrigens kein Handle im eigentlichen Wortsinn, da beides keine eigenständigen Fenster sind. Was du vermutlich eher meinst ist die Referenz (der Pointer) auf die Objekte, und dieser verbirgt sich direkt hinter den Variablennamen. Wenn du z.B. ein TEdit auf ein Formular ziehst, wird per default eine Variable "Edit1" des Formulars angelegt. Mit einem Typecast der Art Integer(Edit1) oder Pointer(Edit1) oder Cardinal(Edit1) kannst du nun die Speicheradresse erhalten, an der das Objekt beginnt, wordurch es eindeutig identifiziert ist.

Das alles, und auch die Hashmap, brauchst du jedoch nicht wirklich. Angenommen du möchtest 4 Timer haben, und eine einzige Methode, die die Events verarbeitet, und jeweils etwas in ein anderes Label schreibt, so würde man vermutlich eher folgendermaßen daran gehen:

Delphi-Quellcode:
// 4 TTimer und 4 TLabel aufs Formular ziehen, und jedem Timer in der Eigenschaft "Tag" einen anderen Wert zuweisen (1-4 z.B.)
.
.

procedure Form1.OnTimers(Sender: TObject);
begin
  case (Sender as TTimer).Tag of
    1: Label1.Caption := 'Timer 1 ist cool';
    2: Label2.Caption := 'Timer 2 ist cooler';
    3: Label3.Caption := 'Timer 3 - der Wahnsinn';
    4: Label4.Caption := 'Timer 4 kann alles';
  end;
end;

// Allen Timern dann diese Prozedur im OI als Eventhandler zuweisen
In dem Fall identifizierst du die Timer über den selbst vergebenen Wert von Tag, da eine Identifikation anhand der Speicheradresse von Programmaufruf zu Programmaufruf verschieden sein kann. Dadurch sparst du dir jedoch das zusätzliche Mitführen einer Zuordnungsliste, da die Zuordnung implizit möglich ist. Es gibt noch etliche weitere Möglichkeiten das zu bewerkstelligen, und welche die beste ist, ist immer sehr detailiert vom jeweiligen Einsatzzweck abhängig. Fakt ist, dass du in Delphi wahrscheinlich sehr viel mehr Möglichkeiten und Strukturen zur Wahl hast, als im WC3 Script, weswegen sich ein Grundlagentutorial wohl sehr anbietet. Eine Programmiersprache ist doch schon ein deutlich anderes Kaliber als ein Gamescript, und man kann vermutlich einiges über weit weniger Umwege erreichen, als du es gewohnt bist.


Gruß,
Medium
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat