Delphi-PRAXiS
Seite 1 von 2  1 2      

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 1. Okt 2006 22:45


Timer in Klassen mehrmals verwenden.
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo ihr,

komme hier grad nicht weiter und brauch eure hilfe.

Zu meinem Programm: Ich möchte durch eingabe zweier Koordinaten eine Position für einen Strich festlegen, welcher nach Mouseklick auf "Zeichnen", dann bei Mouseklick auf "vergrößern" sich immer mehr vergrößert...
Bei Buttonklick "Zeichnen" soll jedesmal ein neuer strich mit einem neuen timer erstellt werden.


Mein Problem liegt in der verwendung von timern bei klassen.

wo kann der fehler liegen? Bitte helfen :wink:

Delphi-Quellcode:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    Image1: TImage;
    btvergroessern: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormActivate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

type
  TWindradTimer = class (TTimer)
  public
    constructor Create (AOwner:TComponent);override;
    procedure Bild(x1,y1:integer);
end;


var
  Form1: TForm1;
  x1,y1,x2:integer;
  Timer1:TWindradTimer;
implementation

{$R *.DFM}

constructor TWindradTimer.Create (AOwner:TComponent);
begin
  inherited Create (AOwner);
  x2:=x2+1;
end;

procedure TWindradTimer.Bild(x1,y1:integer);
begin

  with Form1.Image1.Canvas do begin
  MoveTo(x1,y1);
  LineTo(x2,y1);
  end;

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Timer1:=TWindradTimer.Create(Form1);
  Timer1.Bild(StrToInt(Edit1.text),StrToInt(Edit2.text));

end;

procedure TForm1.FormActivate(Sender: TObject);
begin
 x2:=1;
end;

end.

mkinzler 1. Okt 2006 22:53

Re: Timer in Klassen mehrmals verwenden.
 
Es ist sehr gefährlich in Klassen auf gloable Variablen der Unit zuzugreifen ( x2, Form1).
Deshalb würde ich x2 dem Konstruktor übergeben und Form1 durch Parent ersetzen ( und den dann setzen).
Zu was brauchst du den Timer? Was soll er machen?

fabgo 1. Okt 2006 22:56

Re: Timer in Klassen mehrmals verwenden.
 
der timer soll den strich vergrößern...

mkinzler 1. Okt 2006 23:09

Re: Timer in Klassen mehrmals verwenden.
 
In deinem code macht er aber garnichts.

DP-Maintenance 2. Okt 2006 07:50

DP-Maintenance
 
Dieses Thema wurde von "Phoenix" von "Object-Pascal / Delphi-Language" nach "VCL / WinForms / Controls" verschoben.
Ich will ja eigentlich nicht kleinlich sein, aber der TTimer ist schon ne VCL-Komponente. ;-)

fabgo 2. Okt 2006 08:11

Re: Timer in Klassen mehrmals verwenden.
 
ja, und meine frage ist ja genau "warum nicht?" könnt ihr mir sagen, wie ich das dann machen muss?
ich komm hier nicht weiter...wär echt super...

Phoenix 2. Okt 2006 08:15

Re: Timer in Klassen mehrmals verwenden.
 
Deinem Timer wurde gar keine Funktion zugewiesen die genau dann ausgeführt werden soll wenn er tickt.

Ein Beispiel wie das geht ist grad zufällig in diesem Thread zu sehen - wenn auch mit Schreibfehler ;-)

Edit Nachtrag: Such auch mal nach Hier im Forum suchenEvent zuweisen hier in der DP bzw. nach Hier im Forum suchenTTimer. Da findest Du eigentlich genug Codebeispiele die Dir weiterhelfen dürften.

fabgo 2. Okt 2006 08:56

Re: Timer in Klassen mehrmals verwenden.
 
ok, vielen dank erstmal.

fabgo 2. Okt 2006 10:03

Re: Timer in Klassen mehrmals verwenden.
 
ja, jetzt habe ich es genau so gemacht, wie in dem genannten thread...

wenn ich aber jetzt auf meinen Button klicke, kommt ein Zugriffsfehler.


meine definierte Klasse:
Delphi-Quellcode:
type
  TWindradTimer = class (TTimer)
  public
    constructor Create (AOwner:TComponent);override;
    procedure OnTimerEvent(Sender:TObject);
end;
Delphi-Quellcode:
constructor TWindradTimer.Create (AOwner:TComponent);    // timer wird erstellt
begin
  Timer1.Enabled:=True;
  Timer1.OnTimer:=OnTimerEvent;
  inherited Create (AOwner);

end;

procedure TWindradTimer.OnTimerEvent(Sender:TObject);
begin
  x2:=x2+1;
  with Form1.Image1.Canvas do begin
    MoveTo(5,5);
    LineTo(x2,5);
  end;                                                  
end;
Delphi-Quellcode:

procedure TForm1.Button1Click(Sender: TObject);
begin
  Timer1:=TWindradTimer.Create(Form1);
end;

mkinzler 2. Okt 2006 10:09

Re: Timer in Klassen mehrmals verwenden.
 
Delphi-Quellcode:
constructor TWindradTimer.Create (AOwner:TComponent);    // timer wird erstellt
begin
  inherited Create (AOwner);
  Enabled:=True;
  OnTimer:=OnTimerEvent;
end;
Und jetzt würde ich, wie ich oben schon mal schrieb, den Verweise auf die globalen Variablen entfernen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:59 Uhr.
Seite 1 von 2  1 2      

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