![]() |
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. |
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? |
Re: Timer in Klassen mehrmals verwenden.
der timer soll den strich vergrößern...
|
Re: Timer in Klassen mehrmals verwenden.
In deinem code macht er aber garnichts.
|
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. ;-) |
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... |
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 ![]() Edit Nachtrag: Such auch mal nach ![]() ![]() |
Re: Timer in Klassen mehrmals verwenden.
ok, vielen dank erstmal.
|
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; |
Re: Timer in Klassen mehrmals verwenden.
Delphi-Quellcode:
Und jetzt würde ich, wie ich oben schon mal schrieb, den Verweise auf die globalen Variablen entfernen.
constructor TWindradTimer.Create (AOwner:TComponent); // timer wird erstellt
begin inherited Create (AOwner); Enabled:=True; OnTimer:=OnTimerEvent; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:25 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