Einzelnen Beitrag anzeigen

Basetyp

Registriert seit: 18. Apr 2012
12 Beiträge
 
#7

AW: Prezedur weitere Parameter als Sender: TObject übergeben und dynamische Timer

  Alt 3. Jul 2012, 17:38
Moin...

du bastelst dir dein eigenes Event und löst es im OnTimer aus und übergibst soviele Parameter wie du vorgibst. Deine "Auswertung verknüpfst du dann mit deinem Event statt mit OnTimer.
Delphi-Quellcode:
TMeinEvent = procedure(Sender: Tobject; aIndex: Integer) of object;
.
FMeinEvent: TMeinEvent; // und als Property MeinEvent nach außen verfügbar machen
.
MeinEvent:= MeineProcedure;
.
Layer_Timer[i] := TTimer.Create(Self);
Layer_Timer[i].Tag := i;
.
Layer_Timer[i].OnTimer := MeinOnTimer;
.
.
procedure MeinOnTimer(Sender: TObject);
begin
  if Assigned(FMeinEvent) then
    FMeinEvent(Sender,Sender.Tag);
end;

procedure MeineProcedure(Sender: TObject; aIndex);
begin
  // deine Auswertung
end;
...einfach so runtergetippt mithalboffenen Augen Hoffe es gibt zumindest Denkansatz.
Ich hab leider noch keine Ahnung von Events, aber ist das nicht ein bisschen umständlich erst über ein Event zu gehen? Unheilig1977 hat es ja direkt gelöst, auch ohne überhaupt einen weiteren Parameter zu übergeben.

Ich möchte nur einmal einwerfen, dass zuviele Timer kontraproduktiv sind.
Das dachte ich mir auch schon und kam auch schon darauf alles in einen Timer zu packen wie Jumpy schon gezeigt hat. Allerdings hab ich mich dann doch dazu entschlossen, mehrere Timer zu erstellen, einfach um ein wenig Delphi zu lernen, ohne auf Effizienz meines Programms achten zu müssen. Sollte es dann mal funktionieren, kümmere ich mich auch um sowas.
Außerdem sollten 2 bis maximal 10 timer doch kein Problem darstellen oder?

Danke an alle für die guten Vorschläge, ich werd mich heute mal dran setzen.

EDIT:
Ich habe dann mal hier meine Lösung anzubieten. Funktioniert so wie ich sie gerne hätte, alles nur mit einem Timer. Besonderen Dank dafür an Jumpy.
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var i: Integer;
begin
  If Timer_Mod < 10000 Then Timer_Mod := Timer_Mod + 1
  else Timer_Mod := 0;
  For i := 0 to High(Preset_Star_Speed) do
  begin
    If Timer_Mod mod (Preset_Star_Speed[i] div 10) = 0 Then Layer_Move(i);
  end;
end;

Geändert von Basetyp ( 4. Jul 2012 um 02:13 Uhr) Grund: Meine Lösung angefügt
  Mit Zitat antworten Zitat