一个模仿任务管理器的CPU的曲线图,还是可以用的

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.

  

原文地址:https://www.cnblogs.com/leisure520/p/7899276.html