Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Timer in Klassen mehrmals verwenden. (https://www.delphipraxis.net/78255-timer-klassen-mehrmals-verwenden.html)

fabgo 2. Okt 2006 10:17

Re: Timer in Klassen mehrmals verwenden.
 
danke, jetzt funktioniert ist.

mkinzler 2. Okt 2006 11:08

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;

fabgo 2. Okt 2006 11:13

Re: Timer in Klassen mehrmals verwenden.
 
danke nochmal :hello: :hello: :hello:

fabgo 2. Okt 2006 13:44

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:
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;
gruß fabgo

mkinzler 2. Okt 2006 15:21

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.

mkinzler 2. Okt 2006 16:03

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;

fabgo 2. Okt 2006 16:31

Re: Timer in Klassen mehrmals verwenden.
 
wo verwendest du die procedure setX1( value: Integer); ???

und was soll sie bewirken?

mkinzler 2. Okt 2006 16:34

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 07:34 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz