![]() |
Re: Timer in Klassen mehrmals verwenden.
danke, jetzt funktioniert ist.
|
Re: Timer in Klassen mehrmals verwenden.
Nach Entfernung von Globalreferenzen:
Delphi-Quellcode:
type
TWindradTimer = class (TTimer) private FCanvas: TCanvas; public constructor Create (AOwner:TComponent);override; constructor Create (AOwner:TComponent; Canvas: TCanvas); procedure OnTimerEvent(Sender:TObject); published property Canvas: TCanvas read FCanvas write FCanvas; end; ... constructor TWindradTimer.Create (AOwner:TComponent; Canvas: TCanvas; ) // timer wird erstellt begin inherited Create (AOwner); Enabled:=True; OnTimer:=OnTimerEvent; self.Canvas ;= Canvas; end; procedure TWindradTimer.OnTimerEvent(Sender:TObject); begin x2:=x2+1; with self.Canvas do begin MoveTo(5,5); LineTo(x2,5); end; end; ... procedure TForm1.Button1Click(Sender: TObject); begin Timer1:=TWindradTimer.Create(Form1, Self.Canvas); end; |
Re: Timer in Klassen mehrmals verwenden.
danke nochmal :hello: :hello: :hello:
|
Re: Timer in Klassen mehrmals verwenden.
Ziel meines Programms ist natürlich das gleichzeite laufen der striche, also die gleichzeitige verwendung der timer...
wenn ich also für meine Koordinaten jeweils die in "edit1" und "edit2" eingetippten werte verwende, sollten diese striche dann aber auch alle gleichzeitig weiterlaufen und nicht aufhören...dafür ja schließlich die verwendung von klassen. aber wie mach ich das jetzt? wenn ich das folgendermaßen mache, setzt der immer einen neuen startwert, läuft aber dann immer nur von den neuen koordinaten weiter. und nicht die alten und die neuen striche gemeinsam!
Delphi-Quellcode:
gruß fabgo
procedure TForm1.Button1Click(Sender: TObject);
begin Timer1:=TWindradTimer.Create(Form1, Self.Canvas); x1:=StrToInt(form1.edit1.text); y1:=StrToInt(form1.edit2.text); x2:=x1; end; |
Re: Timer in Klassen mehrmals verwenden.
das hab ich vorhin übersehen, du verwendest ja in der Zeichenroutine auch noch globale Variablen.
Implementiere diese auch noch als properties und erweitere den Konstruktor dementsprechend. |
Re: Timer in Klassen mehrmals verwenden.
Delphi-Quellcode:
type
TWindradTimer = class (TTimer) private FCanvas: TCanvas; Fx1: Integer; public constructor Create (AOwner:TComponent);override; constructor Create (AOwner:TComponent; Canvas: TCanvas; startx: Integer); procedure setX1( value: Integer); procedure OnTimerEvent(Sender:TObject); published property Canvas: TCanvas read FCanvas write FCanvas; property x1: Integer read Fx1 write setX1; end; ... constructor TWindradTimer.Create (AOwner:TComponent; Canvas: TCanvas; startx: Integer ) // timer wird erstellt begin inherited Create (AOwner); Enabled:=True; OnTimer:=OnTimerEvent; self.Canvas := Canvas; self.x1 := startx; end; procedure TWindradTimer.OnTimerEvent(Sender:TObject); begin x1:=x1+1; with self.Canvas do begin MoveTo(5,5); LineTo(x1,5); end; end; ... procedure TForm1.Button1Click(Sender: TObject); begin x1:=StrToInt(form1.edit1.text); y1:=StrToInt(form1.edit2.text); Timer1:=TWindradTimer.Create(Form1, Self.Canvas, x1); end; |
Re: Timer in Klassen mehrmals verwenden.
wo verwendest du die procedure setX1( value: Integer); ???
und was soll sie bewirken? |
Re: Timer in Klassen mehrmals verwenden.
Diese hab ich wohl vergessen. In dieser kann man Prüfungen durchführen bevor man Werte in private Klassenmember übernimmt
Delphi-Quellcode:
procedure TWindradTimer.setX1( Value: Integer);
begin if value > 0 then // Hier noch mehr Überprüfungen möglich. Fx1 := Value; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:47 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-2025 by Thomas Breitkreuz