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

📄 ipiechart.pas

📁 iocopm3.04源码,一套很好的工控开发工具
💻 PAS
📖 第 1 页 / 共 2 页
字号:
{*******************************************************}
{                                                       }
{       TiPieChart Component                            }
{                                                       }
{       Copyright (c) 1997,2003 Iocomp Software         }
{                                                       }
{*******************************************************}
{$I iInclude.inc}

{$ifdef iVCL}unit  iPieChart;{$endif}
{$ifdef iCLX}unit QiPieChart;{$endif}

interface

uses
  {$I iIncludeUses.inc}
  {$IFDEF iVCL} iTypes,  iGPFunctions,  iClasses,  iCustomComponent, iOPCItem;{$ENDIF}
  {$IFDEF iCLX}QiTypes, QiGPFunctions, QiClasses, QiCustomComponent;          {$ENDIF}

type
  TiPieChart = class(TiCustomComponent)
  private
    FItemList                 : TStringList;

    FLegendFont               : TFont;
    FLegendMargin             : Integer;
    FStartDegrees             : Integer;
    FTitleMargin              : Integer;
    FTitleText                : String;
    FTitleFont                : TFont;
    FLegendShowValue          : Boolean;
    FLegendShowPercent        : Boolean;
    FLegendValuePrecision     : Integer;
    FLegendPercentPrecision   : Integer;
    FLegendValueMargin        : Integer;
    FLegendPercentMargin      : Integer;
    FTitleHorizontalAlignment : TiTitleHorizontalAlignment;
    FOuterMargin              : Integer;

    procedure SetLegendFont            (const Value: TFont);
    procedure SetLegendMargin          (const Value: Integer);
    procedure SetStartDegrees          (const Value: Integer);
    procedure SetTitleFont             (const Value: TFont);
    procedure SetTitleMargin           (const Value: Integer);
    procedure SetTitleText             (const Value: String);
    procedure SetLegendPercentPrecision(const Value: Integer);
    procedure SetLegendValuePrecision  (const Value: Integer);
    procedure SetLegendShowPercent     (const Value: Boolean);
    procedure SetLegendShowValue       (const Value: Boolean);

    function GetItemCount                 : Integer;
    function GetItemColor(Index: Integer) : TColor;
    function GetItemTitle(Index: Integer) : String;
    function GetItemValue(Index: Integer) : Double;

    procedure SetItemColor               (Index: Integer; const Value: TColor);
    procedure SetItemTitle               (Index: Integer; const Value: String);
    procedure SetItemValue               (Index: Integer; const Value: Double);
    procedure SetLegendPercentMargin     (const Value: Integer);
    procedure SetLegendValueMargin       (const Value: Integer);
    procedure SetTitleHorizontalAlignment(const Value: TiTitleHorizontalAlignment);
    procedure SetOuterMargin             (const Value: Integer);

  protected
    procedure iPaintTo(Canvas: TCanvas);         override;
    procedure DefineProperties(Filer: TFiler);   override;
    procedure WriteItems      (Writer: TWriter);
    procedure ReadItems       (Reader: TReader);
    function  DoWriteItems : Boolean;

    {$ifdef iVCL}
    procedure UpdateOPCSpecialList;                            override;
    function  OPCNewDataSpecial(iOPCItem: TiOPCItem): Boolean; override;
    {$endif}
  public
    constructor Create(AOwner: TComponent);      override;
    destructor  Destroy;                         override;
    procedure   Loaded;                          override;
    procedure   AddItem(Title: String; Color: TColor; Value: Double);
    procedure   RemoveItem(Index: Integer);
    procedure   ClearList;

    property    ItemCount                 : Integer                    read GetItemCount;
    property    ItemTitle[Index: Integer] : String                     read GetItemTitle              write SetItemTitle;
    property    ItemColor[Index: Integer] : TColor                     read GetItemColor              write SetItemColor;
    property    ItemValue[Index: Integer] : Double                     read GetItemValue              write SetItemValue;
  published
    property OuterMargin                  : Integer                    read FOuterMargin              write SetOuterMargin              default 10;

    property StartDegrees                 : Integer                    read FStartDegrees             write SetStartDegrees             default 90;

    property LegendFont                   : TFont                      read FLegendFont               write SetLegendFont;
    property LegendMargin                 : Integer                    read FLegendMargin             write SetLegendMargin             default 10;

    property TitleText                    : String                     read FTitleText                write SetTitleText;
    property TitleMargin                  : Integer                    read FTitleMargin              write SetTitleMargin              default 10;
    property TitleFont                    : TFont                      read FTitleFont                write SetTitleFont;
    property TitleHorizontalAlignment     : TiTitleHorizontalAlignment read FTitleHorizontalAlignment write SetTitleHorizontalAlignment default ithaCenterDisplay;

    property LegendShowValue              : Boolean                    read FLegendShowValue          write SetLegendShowValue          default False;
    property LegendShowPercent            : Boolean                    read FLegendShowPercent        write SetLegendShowPercent        default False;
    property LegendValuePrecision         : Integer                    read FLegendValuePrecision     write SetLegendValuePrecision     default 1;
    property LegendValueMargin            : Integer                    read FLegendValueMargin        write SetLegendValueMargin        default 10;
    property LegendPercentPrecision       : Integer                    read FLegendPercentPrecision   write SetLegendPercentPrecision   default 1;
    property LegendPercentMargin          : Integer                    read FLegendPercentMargin      write SetLegendPercentMargin      default 10;

    property BackGroundColor;
    property BorderStyle      default ibsRaised;
    property Transparent;
    property Width            default 200;
    property Height           default 150;
  end;

implementation
//****************************************************************************************************************************************************
constructor TiPieChart.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);

  Width           := 200;
  Height          := 150;
  BorderStyle     := ibsRaised;

  FOuterMargin            := 10;
  FStartDegrees           := 90;
  FLegendMargin           := 10;

  FTitleMargin            := 10;
  FTitleText              := 'Pie Chart 1';

  FLegendValuePrecision   := 1;
  FLegendPercentPrecision := 1;
  FLegendValueMargin      := 10;
  FLegendPercentMargin    := 10;

  FItemList   := TStringList.Create;

  FLegendFont := TFont.Create; FLegendFont.OnChange := BackGroundChangeEvent;
  FTitleFont  := TFont.Create; FTitleFont.OnChange  := BackGroundChangeEvent;

  AddItem('Item 1', clRed,  100);
  AddItem('Item 2', clLime, 100);
  AddItem('Item 3', clBlue, 100);
end;
//****************************************************************************************************************************************************
destructor TiPieChart.Destroy;
begin
  ClearList;
  FItemList.Free;
  FLegendFont.Free;
  FTitleFont.Free;
  inherited;
end;
//****************************************************************************************************************************************************
procedure TiPieChart.Loaded;
begin
  inherited;
  if ItemCount = 0 then
    begin
      AddItem('Item 1', clRed,  100);
      AddItem('Item 2', clLime, 100);
      AddItem('Item 3', clBlue, 100);
    end;
end;
//****************************************************************************************************************************************************
procedure TiPieChart.SetLegendMargin          (const Value:Integer);begin SetIntegerProperty(Value,FLegendMargin,          irtInvalidate);end;
procedure TiPieChart.SetTitleMargin           (const Value:Integer);begin SetIntegerProperty(Value,FTitleMargin,           irtInvalidate);end;
procedure TiPieChart.SetTitleText             (const Value:String );begin SetStringProperty (Value,FTitleText,             irtInvalidate);end;
procedure TiPieChart.SetOuterMargin           (const Value:Integer);begin SetIntegerProperty(Value,FOuterMargin,           irtInvalidate);end;
procedure TiPieChart.SetLegendPercentPrecision(const Value:Integer);begin SetIntegerProperty(Value,FLegendPercentPrecision,irtInvalidate);end;
procedure TiPieChart.SetLegendValuePrecision  (const Value:Integer);begin SetIntegerProperty(Value,FLegendValuePrecision,  irtInvalidate);end;
procedure TiPieChart.SetLegendShowPercent     (const Value:Boolean);begin SetBooleanProperty(Value,FLegendShowPercent,     irtInvalidate);end;
procedure TiPieChart.SetLegendShowValue       (const Value:Boolean);begin SetBooleanProperty(Value,FLegendShowValue,       irtInvalidate);end;
procedure TiPieChart.SetLegendPercentMargin   (const Value:Integer);begin SetIntegerProperty(Value,FLegendPercentMargin,   irtInvalidate);end;
procedure TiPieChart.SetLegendValueMargin     (const Value:Integer);begin SetIntegerProperty(Value,FLegendValueMargin,     irtInvalidate);end;
//****************************************************************************************************************************************************
procedure TiPieChart.SetLegendFont(const Value:TFont);begin FLegendFont.Assign(Value);end;
procedure TiPieChart.SetTitleFont (const Value:TFont);begin FTitleFont.Assign (Value);end;
//****************************************************************************************************************************************************
procedure TiPieChart.ClearList;
begin
  while FItemList.Count > 0 do
    begin
      FItemList.Objects[0].Free;
      FItemList.Delete(0);
    end;
end;
//****************************************************************************************************************************************************
procedure TiPieChart.SetTitleHorizontalAlignment(const Value: TiTitleHorizontalAlignment);
begin
  if FTitleHorizontalAlignment <> Value then
    begin
      FTitleHorizontalAlignment := Value;
      InvalidateChange;
    end;
end;
//****************************************************************************************************************************************************
procedure TiPieChart.AddItem(Title: String; Color: TColor; Value: Double);
var
  iPercentItemObject : TiPercentItemObject;
begin
  iPercentItemObject       := TiPercentItemObject.Create;
  iPercentItemObject.Title := Title;
  iPercentItemObject.Color := Color;
  iPercentItemObject.Value := Value;
  FItemList.AddObject('', iPercentItemObject);

  InvalidateChange;
end;
//****************************************************************************************************************************************************
function TiPieChart.GetItemCount: Integer;
begin
  Result := FItemList.Count;
end;
//****************************************************************************************************************************************************
procedure TiPieChart.RemoveItem(Index: Integer);
begin
  if (Index < 0) or (Index > FItemList.Count) then raise Exception.Create('Item Index out of Bounds');
  FitemList.Objects[Index].Free;
  FitemList.Delete(Index);
  InvalidateChange;
end;
//****************************************************************************************************************************************************
function TiPieChart.GetItemTitle(Index: Integer): String;
begin
  if (Index < 0) or (Index > FItemList.Count) then raise Exception.Create('Item Index out of Bounds');
  Result := (FitemList.Objects[Index] as TiPercentItemObject).Title;
end;
//****************************************************************************************************************************************************
function TiPieChart.GetItemColor(Index: Integer): TColor;
begin
  if (Index < 0) or (Index > FItemList.Count) then raise Exception.Create('Item Index out of Bounds');
  Result := (FitemList.Objects[Index] as TiPercentItemObject).Color;
end;
//****************************************************************************************************************************************************
function TiPieChart.GetItemValue(Index: Integer): Double;
begin
  if (Index < 0) or (Index > FItemList.Count) then raise Exception.Create('Item Index out of Bounds');
  Result := (FitemList.Objects[Index] as TiPercentItemObject).Value;
end;
//****************************************************************************************************************************************************
procedure TiPieChart.SetItemTitle(Index: Integer; const Value: String);
begin
  if (Index < 0) or (Index > FItemList.Count) then raise Exception.Create('Item Index out of Bounds');
  (FitemList.Objects[Index] as TiPercentItemObject).Title := Value;
  InvalidateChange;
end;
//****************************************************************************************************************************************************
procedure TiPieChart.SetItemColor(Index: Integer; const Value: TColor);
begin
  if (Index < 0) or (Index > FItemList.Count) then raise Exception.Create('Item Index out of Bounds');
  (FitemList.Objects[Index] as TiPercentItemObject).Color := Value;
  InvalidateChange;
end;
//****************************************************************************************************************************************************
procedure TiPieChart.SetItemValue(Index: Integer; const Value: Double);
var
  TempValue : Double;
begin
  if Value < 0 then TempValue := 0 else TempValue := Value;
  if (Index < 0) or (Index > FItemList.Count) then raise Exception.Create('Item Index out of Bounds');
  (FitemList.Objects[Index] as TiPercentItemObject).Value := TempValue;
  InvalidateChange;
end;
//****************************************************************************************************************************************************

⌨️ 快捷键说明

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