TAChart: Add Marks.Arrow property

git-svn-id: trunk@38502 -
This commit is contained in:
ask 2012-09-03 16:47:55 +00:00
parent 09c5679a89
commit 73b155ec26

View File

@ -98,6 +98,8 @@ type
FAlignment: TAlignment;
procedure AddMargins(ADrawer: IChartDrawer; var ASize: TPoint);
procedure ApplyLabelFont(ADrawer: IChartDrawer); virtual;
procedure DrawLink(
ADrawer: IChartDrawer; ADataPoint, ALabelCenter: TPoint); virtual;
function IsMarginRequired: Boolean;
strict protected
function GetFrame: TChartPen; virtual; abstract;
@ -166,6 +168,8 @@ type
property Visible default false;
end;
TChartArrow = class;
TChartMarkAttachment = (maDefault, maEdge, maCenter);
{ TGenericChartMarks }
@ -178,10 +182,12 @@ type
{$ENDIF}
strict private
FAdditionalAngle: Double;
FArrow: TChartArrow;
FAttachment: TChartMarkAttachment;
FFrame: _TFramePen;
FYIndex: Integer;
function GetDistanceToCenter: Boolean;
procedure SetArrow(AValue: TChartArrow);
procedure SetAttachment(AValue: TChartMarkAttachment);
procedure SetDistance(AValue: TChartDistance);
procedure SetDistanceToCenter(AValue: Boolean);
@ -201,6 +207,8 @@ type
FStyle: TSeriesMarksStyle;
strict protected
procedure ApplyLabelFont(ADrawer: IChartDrawer); override;
procedure DrawLink(
ADrawer: IChartDrawer; ADataPoint, ALabelCenter: TPoint); override;
function GetFrame: TChartPen; override;
function GetLabelAngle: Double; override;
function GetLabelBrush: TBrush; override;
@ -215,6 +223,7 @@ type
function IsMarkLabelsVisible: Boolean;
procedure SetAdditionalAngle(AAngle: Double);
public
property Arrow: TChartArrow read FArrow write SetArrow;
property DistanceToCenter: Boolean
read GetDistanceToCenter write SetDistanceToCenter
stored false default false;
@ -257,6 +266,7 @@ type
procedure Assign(Source: TPersistent); override;
constructor Create(AOwner: TCustomChart);
published
property Arrow;
property Distance default DEF_MARKS_DISTANCE;
property Format;
property Frame;
@ -533,10 +543,7 @@ begin
if not Clipped then
ADrawer.ClippingStop;
if (ADataPoint <> ALabelCenter) and GetLinkPen.Visible then begin
ADrawer.Pen := GetLinkPen;
ADrawer.Line(ADataPoint, ALabelCenter);
end;
DrawLink(ADrawer, ADataPoint, ALabelCenter);
ADrawer.Brush := GetLabelBrush;
if IsMarginRequired then begin
if GetFrame.Visible then
@ -552,6 +559,19 @@ begin
ADrawer.ClippingStart;
end;
procedure TChartTextElement.DrawLink(
ADrawer: IChartDrawer; ADataPoint, ALabelCenter: TPoint);
var
p: TChartPen;
begin
if ADataPoint = ALabelCenter then exit;
p := GetLinkPen;
if p.Visible then begin
ADrawer.Pen := p;
ADrawer.Line(ADataPoint, ALabelCenter);
end;
end;
function TChartTextElement.GetLabelAngle: Double;
begin
// Negate to take into account top-down Y axis.
@ -752,6 +772,7 @@ end;
constructor TGenericChartMarks.Create(AOwner: TCustomChart);
begin
inherited Create(AOwner);
FArrow := TChartArrow.Create(AOwner);
InitHelper(FFrame, _TFramePen);
InitHelper(FLabelBrush, _TLabelBrush);
InitHelper(FLabelFont, TFont);
@ -762,6 +783,7 @@ end;
destructor TGenericChartMarks.Destroy;
begin
FreeAndNil(FArrow);
FreeAndNil(FFrame);
FreeAndNil(FLabelBrush);
FreeAndNil(FLabelFont);
@ -769,6 +791,14 @@ begin
inherited;
end;
procedure TGenericChartMarks.DrawLink(
ADrawer: IChartDrawer; ADataPoint, ALabelCenter: TPoint);
begin
inherited;
with (ADataPoint - ALabelCenter) do
Arrow.Draw(ADrawer, ADataPoint, ArcTan2(Y, X), GetLinkPen);
end;
function TGenericChartMarks.GetDistanceToCenter: Boolean;
begin
Result := Attachment = maCenter;
@ -809,6 +839,13 @@ begin
FAdditionalAngle := AAngle;
end;
procedure TGenericChartMarks.SetArrow(AValue: TChartArrow);
begin
if FArrow = AValue then exit;
FArrow.Assign(AValue);
StyleChanged(Self);
end;
procedure TGenericChartMarks.SetAttachment(AValue: TChartMarkAttachment);
begin
if FAttachment = AValue then exit;