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

📄 piereg.~pas

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

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

uses
  Windows, Classes, Graphics, Forms, Controls, Pies, Buttons, DesignIntf,
  DesignWindows,StdCtrls, ComCtrls, DesignEditors, SysUtils, Dialogs;

{$R *.dfm}

type
//-----------------定制的角度属性编辑对话框TAngleEditDlg类----------------------
  TAngleEditDlg = class(TForm)
    //--------窗口内包含的对象---------------
    OKButton: TButton;                 //一个OK按钮

    SAngleLabel: TLabel;               //两个标签
    EAngleLabel: TLabel;

    STrackBar: TTrackBar;              //两个轨迹条
    ETrackBar: TTrackBar;
    //--------函数---------------
    procedure STrackBarChange(Sender: TObject);    //轨迹条滑块位置改变事件处理
    procedure ETrackBarChange(Sender:TObject);     //轨迹条滑块位置改变事件处理
  private
    FAngles:TAngles;                               //角度属性变量
    procedure SetAngles(Value:TAngles);            //设置角度属性函数
  public
    //建立一个内部的TAngles属性,用于传递TAngles的属性值
    property pAngles:TAngles read FAngles write SetAngles stored True;
  end;
//-----------------TAngles的属性编辑器类TAngleProperty--------------------------
TAnglesProperty=class(TClassProperty)
public
 procedure Edit;override;
 function  GetAttributes:TPropertyAttributes;override;
end;
//---------------------组件注册函数声明-----------------------------------------
procedure Register;
//****************************执行部分******************************************
implementation

//-------------------------TAngleEditDlg类成员函数------------------------------
//----开始角度轨迹条改变事件处理函数------
procedure TAngleEditDlg.STrackBarChange(Sender:TObject);
begin
  SAngleLabel.Caption:='Start Angle ='+IntToStr(STrackBar.Position);
  FAngles.StartAngle:=STrackBar.Position;  //传递变量
end;
//----结束角度轨迹条改变事件处理函数------
procedure TAngleEditDlg.ETrackBarChange(Sender:TObject);
begin
  EAngleLabel.Caption:='End Angle ='+IntToStr(ETrackBar.Position);
  FAngles.EndAngle:=ETrackBar.Position;   //传递变量
end;
//------设置角度属性----------------------
//在对象查看器中单击带省略号按钮,弹出对话框前自动调用
procedure TAngleEditDlg.SetAngles(Value:TAngles);
begin
  FAngles:=Value;       //修改角度属性变量FAngles
  STrackBar.Position:=Value.StartAngle;
  SAngleLabel.Caption:='Start Angle ='+IntToStr(Value.StartAngle);

  ETrackBar.Position:=Value.EndAngle;
  EAngleLabel.Caption:='End Angle ='+IntToStr(Value.EndAngle);
end;
//-----------------TAngles属性编辑器类TAngleProperty的成员函数------------------
{//----重载Edit函数,以使用户设计程序时在对象查看器中单击属性右侧带省略符号的
按钮时,显示一个设置属性的对话框---------------//}
procedure TAnglesProperty.Edit;
var
 Angles:TAngles;
 AngleEditDlg:TAngleEditDlg;
begin
 Angles:=TAngles(GetOrdValue);   //初始化
 AngleEditDlg:= TAngleEditDlg.Create(Application);
   //将TAngles的属性传递给对话框内部TAngles属性的对象EditorAngles
 try
   AngleEditDlg.pAngles:=Angles;   //用调整前的Angles属性传给对话框的pAngles
   AngleEditDlg.ShowModal;
   Modified;                       //通知属性被修改
 finally
   AngleEditDlg.Free;
 end;
end;

function TAnglesProperty.GetAttributes:TPropertyAttributes;
begin
 result :=[paDialog,paSubProperties{, paAutoUpdate}];
end;
//----------------------------组件注册函数--------------------------------------
procedure Register;
begin
  RegisterComponents('YuRonghua', [TPie]);
  RegisterPropertyEditor(TypeInfo(TAngles),
                         TPie,
                         'Angles',
                         TAnglesProperty);
end;
//------------------------------------------------------------------------------
end.

⌨️ 快捷键说明

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