📄 ipiechart.pas
字号:
{*******************************************************}
{ }
{ 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 + -