da ich für meine Aufgaben bisher keinen TFPTimer benötigt habe, dies aber zur Zeit in einem anderen Forum diskutiert wird, habe ich mir mal ein kleines Prog (für mich zum verstehen) geschrieben.
Code: Alles auswählen
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Forms, Dialogs, LCLType, StdCtrls, fptimer ;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
procedure FormCreate(Sender: TObject);
private
{ private declarations }
procedure DOTick(sender:TObject);
public
{ public declarations }
end;
var
Form1: TForm1;
FTimer: TFPTimer;
implementation
{$R *.lfm}
{ TForm1 }
procedure ZeichneLinie;
const
x1:integer=0;
x2:integer=0;
y1:integer=0;
y2:integer=0;
dx1:integer=2;
dx2:integer=2;
dy1:integer=4;
dy2:integer=4;
begin
inc(x1,dx1);
if x1<0 then dx1:=random(5)+1;
if x1>Form1.Canvas.Width then dx1:=-random(5)+1;
inc(x2,dx2);
if x2<0 then dx2:=random(5)+1;
if x2>Form1.Canvas.Width then dx2:=-random(5)+1;
inc(y1,dy1);
if y1<0 then dy1:=random(5)+1;
if y1>Form1.Canvas.Height then dy1:=-random(5)+1;
inc(y2,dy2);
if y2<0 then dy2:=random(5)+1;
if y2>Form1.Canvas.Height then dy2:=-random(5)+1;
Form1.Canvas.Clear;
Form1.Canvas.Line(x1,y1,x2,y2);
end;
procedure TForm1.DOTick(sender:TObject);
begin
ZeichneLinie;
end;
procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
// FTimer.Enabled:=false;
FTimer.Free;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Form1.Canvas.Brush.Color:=random($FFFFFF);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FTimer:=TFPTimer.create(self);
FTimer.OnTimer:=@DoTick;
FTimer.interval:=10;
FTimer.Enabled:=true;
end;
end.
Woran kann das liegen?!
[Edit] Habe jetzt mal statt TFPTimer den TTimer von Unit "ExtCtrls" genutzt und die Form über 20 mal geöffnet und geschlossen, dort scheint das ganze ohne Probleme zu funktionieren



Michl