FPTimer und Nutzung

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Michl
Beiträge: 2513
Registriert: Di 19. Jun 2012, 12:54

FPTimer und Nutzung

Beitrag von Michl »

Hallo,

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. 
Eine Linie bewegt sich aufgrund dem Aufruf des FPTimers, der Button ändert die Farbe der Form - dient wie gesagt nur zur Überprüfung, ob der FPTimer funktioniert. Will man das Programm beenden funktioniert dies manchmal und manchmal hängt sich das Programm auf.

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

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Antworten