⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pies.pas

📁 一个画饼图控件,
💻 PAS
字号:
unit Pies;

//******************************接口部分****************************************
interface

uses
  Classes, Controls, Forms, Graphics, StdCtrls,Dialogs;

type
//--------------------------饼图角度自定义属性类--------------------------------
//这一个类是组件TPie类中用到的一个表示饼图张角属性的类型.
//该类只公布两个属性: StartAngle和 EndAngle
  TAngles = class(TPersistent)
  private
    //----------成员属性变量声明---------------
    FStartAngle:Integer;      //饼图张角始边弧度
    FEndAngle:Integer;        //饼图张角末边弧度
    FOnChange:TNotifyEvent;   //张角改变事件属性变量
    //-------成员函数声明--------------------
    procedure SetStart(Value:Integer);    //设置张角始边弧度
    procedure SetEnd(Value:Integer);      //设置张角末边弧度

  published
    //---------------成员属性声明------------
    property StartAngle:Integer read FStartAngle write SetStart;//张角始边属性
    property EndAngle:Integer read FEndAngle write SetEnd;       //张角末边属性
    //----------------事件属性声明-----------
    //下面属性用于建立张角状态改变的事件消息
    property OnChange:TNotifyEvent read FOnChange write FOnChange;//张角改变事件
  end;
//--------------------------饼图组件类------------------------------------------
  TPie = class(TGraphicControl)

    FAngles:TAngles;                   //角度属性变量(见上述自定类型)

    constructor Create(AOwner:TComponent);override; //重载构造函数声明

    procedure  Paint;override;                  //重载界面绘制函数声明
    procedure SetAngles(Value:TAngles);         //设置饼图角度属性函数声明

    procedure StyleChanged(Sender:TObject); dynamic; //属性改变事件处理函数声明

  published
    property Angles:TAngles read FAngles write SetAngles;//张角属性
  end;

//******************************执行部分****************************************
implementation
 uses Windows, PieReg;
//-------------------------饼图角度类TAngles的成员函数--------------------------
procedure TAngles.SetStart(Value:Integer);  //设置角度起始值
begin
 if Value<>FStartAngle then
 begin
  FStartAngle:=Value;
  FOnChange(Self);                          //通报属性改变事件
 end;
end;

procedure TAngles.SetEnd(Value:Integer);    //设置角度结束值
begin
 if Value<>FEndAngle then
 begin
  FEndAngle:=Value;
  FOnChange(Self);                         //通报属性改变事件
 end;
end;

//-------------------------饼图组件类TPie的成员函数-----------------------------
//---------构造函数-------------------------
constructor TPie.Create(AOwner:TComponent);
begin
 inherited Create(AOwner);                     //继承父类的构造函数
 Angles:=TAngles.Create;                       //角度属性初始化
 Angles.OnChange:=StyleChanged;                //指定属性改变事件捕捉器
 //设置组件的界面尺寸
 Width:=120;
 Height:=120;
  //设置张角默认值
 FAngles.StartAngle:=180;
 FAngles.EndAngle:=90;
 end;
//--------属性改变事件处理函数-------------
//当收到一个属性改变事件通报消息时执行
procedure TPie.StyleChanged(Sender:TObject);
begin
 Invalidate ;    //重绘界面
end;
//
procedure TPie.SetAngles(Value:TAngles);
begin
 FAngles:=Value;
 Invalidate ;    //重绘界面
end;

//-------重载界面绘制函数-----------------
procedure TPie.Paint;
var
  midX,MidY,stX,stY,endX,endY:Integer;     //饼图中心,圆周起点,终点坐标整数值
  sX,SY,eX,eY:Real;                        //饼图圆周起点,终点坐标浮点值
begin
  midX:=Width div 2;                       //计算中心点坐标
  midY:=Height div 2;                      

  sX:=Cos((FAngles.StartAngle/180.0)*pi);
  sY:=Sin((FAngles.StartAngle/180.0)*pi);
  eX:=Cos((FAngles.EndAngle/180.0)*pi);
  eY:=Sin((FAngles.EndAngle/180.0)*pi);

  stX:=Round(sX*100);
  stY:=Round(sY*100);
  endX:=Round(eX*100);
  endY:=Round(eY*100);

  Canvas.Pen.Color:=clRed;;
  Canvas.Brush.Color:=clYellow;
  Canvas.Pie(0,0, Width,Height,midX+stX,midY-stY,midX+endX,midY-endY);
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -