
07.08.2012, 15:55
|
Прохожий
|
|
Регистрация: 03.08.2012
Сообщения: 10
Репутация: 10
|
|
Рисуем график
Подскажите пожалуйста как можно построить график не мгновенно, а чтобы график строился "во времени" - т.е. плавное построение графика....
Данная программа строит график мгновенно и несколько раз, подскажите пожалуйста как построить плавно по точкам
Код:
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
ExtCtrls, StdCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Timer1: TTimer;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
x0, y0 : integer;
h, w : integer;
dx, dy : integer;
x, y : integer;
cross : integer;
dcross : integer;
lx, ly : real;
dlx,dly: real;
i : integer;
a,b: integer;
xg, yg : array[0..12] of integer;
implementation
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
randomize;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
timer1.Enabled:=false;
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
x0:=30; y0:=420;
h:=400; w:=520;
dx:=40; dy:=40;
dcross:=1;
dlx:=1.0; dly:=1.0;
with form1.Canvas do
begin
pen.Color:=clBlack;
cross:=dcross;
moveto(x0,y0); lineto(x0,y0-h);
moveto(x0,y0); lineto(x0+w,y0);
//засечка, сетка и оцифровка по оси Х
x:=x0+dx;
lx:=dlx;
repeat
moveto(x, y0-3); lineto(x, y0+3);
cross:=cross-1;
if cross = 0 then
begin
textout(x-8,y0+5,floattostr(lx));
cross:=dcross;
end;
pen.style:=psdot;
moveto(x, y0-10); lineto(x, y0-h);
pen.style:=pssolid;
lx:=lx+dlx;
x:=x+dx;
until(x>x0+w);
y:=y0-dy;
ly:=dly;
repeat
moveto(x0-3, y); lineto(x0+3, y);
textout(x0-20,y,floattostr(ly));
pen.style:=psdot;
moveto(x0+3, y); lineto(x0+w, y);
pen.style:=pssolid;
y:=y-dy;
ly:=ly+dly;
until(y<y0-h);
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
for i:=0 to 12 do
begin
xg[i]:=i;
yg[i]:=random(10);
end;
// построение графика
with canvas do
begin
pen.Style:=psSolid;
pen.Color:=clRed;
x:=trunc(x0+xg[0]*dx/dlx);
y:=trunc(y0-yg[0]*dy/dly);
moveto(x,y);
for i:=1 to 12 do
begin
x:=trunc(x0+xg[i]*dx/dlx);
y:=trunc(y0-yg[i]*dy/dly);
lineto(x,y);
end;
end;
//i:=i+1;
end;
initialization
{$I unit1.lrs}
end.
|