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.