📄 pies.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 + -