|
#1
|
|||
|
|||
Рисуем график
Подскажите пожалуйста как можно построить график не мгновенно, а чтобы график строился "во времени" - т.е. плавное построение графика....
Данная программа строит график мгновенно и несколько раз, подскажите пожалуйста как построить плавно по точкам Код:
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. |
#2
|
||||
|
||||
Цитата:
|
#3
|
||||
|
||||
В имидж медленно рисует, лучше уж PaintBox.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#4
|
||||
|
||||
Цитата:
|
#5
|
||||
|
||||
Извиняй, читал по диагонали.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#6
|
|||
|
|||
Цитата:
а чем плохо рисовать просто на форме? |
#7
|
||||
|
||||
тем, что уведи за границу экрана форму и верни назад, рисунок сотрется.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#8
|
||||
|
||||
В таком случае и в PaintBox потеряет картинку, нужно обновлять.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#9
|
||||
|
||||
рисовать в OnPaint
Понять, что хочет заказчик - бесценно, ведь он платит MasterCard |
#10
|
||||
|
||||
рисовать по таймеру на "буферном" битмапе, отрисовывать битмап в OnPaint контрола.
Пишу программы за еду. __________________ |