unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs,Vcl.StdCtrls, Vcl.ExtCtrls,math;
type
TDynArray = array of integer;
PArr = ^TDynArray;
Tpb2 = class(TForm)
Button1: TButton;
pb1: TPaintBox;
Timer1: TTimer;
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
procedure mPaint();
public
{ Public declarations }
end;
var
pb2: Tpb2;
re: TDynArray ;
b:integer;
implementation
{$R *.dfm}
procedure AddArrayItem(var Arr: TDynArray; x: Integer);
begin
SetLength(Arr,Length(Arr)+1);
Arr[High(Arr)] := x;
end;
procedure DeleteArrItem(p: PArr; Index: Integer);
var
Count: Cardinal;
begin
Count := Length(p^);
if (Count = 0) or (Index < 0) or (Index >= Count) then Exit;
Move(p^[Index+1], p^[Index], (Count-Index)* SizeOf(p^[0]));
SetLength(p^, Count - 1);
end;
procedure Tpb2.mPaint();
var
mRect: TRect;
i,t,a,rd: integer;
begin
pb1.Canvas.Brush.Color := clblack ;
pb1.Canvas.Brush.Style := bsSolid;
mRect.Left := 0;
mRect.Top := 0;
mRect.Right := pb1.Width;
mRect.Bottom := pb1.Width;
pb1.Canvas.FillRect(mRect);
pb1.Canvas.Rectangle(mRect);
pb1.Canvas.Pen.Color := clgreen ;
pb1.Canvas.Pen.Style := psSolid;
for i:= 1 to 20 do
begin
pb1.Canvas.MoveTo( i*12,0);
pb1.Canvas.LineTo(i*12,pb1.Height);
end;
for i:= 1 to round(pb1.Height/12) do
begin
pb1.Canvas.MoveTo(0, i*12);
pb1.Canvas.LineTo(240,i*12);
end;
t:= round( randomrange(30,70)); //模拟产生曲线
rd:=round(t/100*pb1.Height);
for i:= 1 to 40 do
begin
pb1.Canvas.Rectangle(270,10 +(i-1)*4,290,10+(i-1)*4+2);
pb1.Canvas.Rectangle(292,10 +(i-1)*4,312,10+(i-1)*4+2);
if (40-i)= round( (40*t/100)) then
pb1.Canvas.Pen.Color := cllime ;
end;
addArrayItem(re,rd);
if b>pb1.Width then
begin
DeleteArrItem(@re,1);
end ;
a:=length(re);
pb1.Canvas.Pen.Color := cllime ;
for i:=0 to length(re) do
begin
if a<>length(re) then
begin
pb1.Canvas.MoveTo(240-i, pb1.Height-re[a]);
pb1.Canvas.LineTo(240-i+1,pb1.Height-re[a+1]);
end;
a:=a-1 ;
end;
b:=b+1
end;
procedure Tpb2.Timer1Timer(Sender: TObject);
begin
mPaint();
end;
end.