mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-14 04:39:45 +02:00
TAChart: Various improvements of ChartEditor demo.
This commit is contained in:
parent
cbbc6306a8
commit
9ee5e00da7
105
components/tachart/demo/charteditor/cearrowframe.lfm
Normal file
105
components/tachart/demo/charteditor/cearrowframe.lfm
Normal file
@ -0,0 +1,105 @@
|
||||
object ChartArrowFrame: TChartArrowFrame
|
||||
Left = 0
|
||||
Height = 125
|
||||
Top = 0
|
||||
Width = 171
|
||||
ClientHeight = 125
|
||||
ClientWidth = 171
|
||||
TabOrder = 0
|
||||
DesignLeft = 390
|
||||
DesignTop = 154
|
||||
object cbArrowVisible: TCheckBox
|
||||
AnchorSideLeft.Control = Owner
|
||||
AnchorSideTop.Control = Owner
|
||||
Left = 0
|
||||
Height = 19
|
||||
Top = 0
|
||||
Width = 54
|
||||
Caption = 'Visible'
|
||||
OnChange = cbArrowVisibleChange
|
||||
TabOrder = 0
|
||||
end
|
||||
object lblArrowBaseLength: TLabel
|
||||
AnchorSideLeft.Control = cbArrowVisible
|
||||
AnchorSideTop.Control = seArrowBaseLength
|
||||
AnchorSideTop.Side = asrCenter
|
||||
Left = 0
|
||||
Height = 15
|
||||
Top = 31
|
||||
Width = 61
|
||||
Caption = 'Base length'
|
||||
end
|
||||
object lblArrowLength: TLabel
|
||||
AnchorSideLeft.Control = cbArrowVisible
|
||||
AnchorSideTop.Control = seArrowLength
|
||||
AnchorSideTop.Side = asrCenter
|
||||
Left = 0
|
||||
Height = 15
|
||||
Top = 62
|
||||
Width = 37
|
||||
Caption = 'Length'
|
||||
end
|
||||
object lblArrowWidth: TLabel
|
||||
AnchorSideLeft.Control = cbArrowVisible
|
||||
AnchorSideTop.Control = seArrowWidth
|
||||
AnchorSideTop.Side = asrCenter
|
||||
Left = 0
|
||||
Height = 15
|
||||
Top = 93
|
||||
Width = 32
|
||||
Caption = 'Width'
|
||||
end
|
||||
object seArrowBaseLength: TSpinEdit
|
||||
AnchorSideLeft.Control = lblArrowBaseLength
|
||||
AnchorSideLeft.Side = asrBottom
|
||||
AnchorSideTop.Control = cbArrowVisible
|
||||
AnchorSideTop.Side = asrBottom
|
||||
AnchorSideRight.Control = Owner
|
||||
AnchorSideRight.Side = asrBottom
|
||||
Left = 85
|
||||
Height = 23
|
||||
Top = 27
|
||||
Width = 86
|
||||
Alignment = taRightJustify
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
BorderSpacing.Left = 24
|
||||
BorderSpacing.Top = 8
|
||||
MaxValue = 1000
|
||||
OnChange = seArrowBaseLengthChange
|
||||
TabOrder = 1
|
||||
end
|
||||
object seArrowLength: TSpinEdit
|
||||
AnchorSideLeft.Control = seArrowBaseLength
|
||||
AnchorSideTop.Control = seArrowBaseLength
|
||||
AnchorSideTop.Side = asrBottom
|
||||
AnchorSideRight.Control = seArrowBaseLength
|
||||
AnchorSideRight.Side = asrBottom
|
||||
Left = 85
|
||||
Height = 23
|
||||
Top = 58
|
||||
Width = 86
|
||||
Alignment = taRightJustify
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
BorderSpacing.Top = 8
|
||||
MaxValue = 1000
|
||||
OnChange = seArrowLengthChange
|
||||
TabOrder = 2
|
||||
end
|
||||
object seArrowWidth: TSpinEdit
|
||||
AnchorSideLeft.Control = seArrowBaseLength
|
||||
AnchorSideTop.Control = seArrowLength
|
||||
AnchorSideTop.Side = asrBottom
|
||||
AnchorSideRight.Control = seArrowBaseLength
|
||||
AnchorSideRight.Side = asrBottom
|
||||
Left = 85
|
||||
Height = 23
|
||||
Top = 89
|
||||
Width = 86
|
||||
Alignment = taRightJustify
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
BorderSpacing.Top = 8
|
||||
MaxValue = 1000
|
||||
OnChange = seArrowWidthChange
|
||||
TabOrder = 3
|
||||
end
|
||||
end
|
81
components/tachart/demo/charteditor/cearrowframe.pas
Normal file
81
components/tachart/demo/charteditor/cearrowframe.pas
Normal file
@ -0,0 +1,81 @@
|
||||
unit ceArrowFrame;
|
||||
|
||||
{$mode ObjFPC}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, Forms, Controls, StdCtrls, Spin,
|
||||
TATypes;
|
||||
|
||||
type
|
||||
|
||||
{ TChartArrowFrame }
|
||||
|
||||
TChartArrowFrame = class(TFrame)
|
||||
cbArrowVisible: TCheckBox;
|
||||
lblArrowBaseLength: TLabel;
|
||||
lblArrowLength: TLabel;
|
||||
lblArrowWidth: TLabel;
|
||||
seArrowBaseLength: TSpinEdit;
|
||||
seArrowLength: TSpinEdit;
|
||||
seArrowWidth: TSpinEdit;
|
||||
procedure cbArrowVisibleChange(Sender: TObject);
|
||||
procedure seArrowBaseLengthChange(Sender: TObject);
|
||||
procedure seArrowLengthChange(Sender: TObject);
|
||||
procedure seArrowWidthChange(Sender: TObject);
|
||||
private
|
||||
FArrow: TChartArrow;
|
||||
procedure DoChange;
|
||||
public
|
||||
procedure Prepare(Arrow: TChartArrow);
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
||||
{$R *.lfm}
|
||||
|
||||
procedure TChartArrowFrame.cbArrowVisibleChange(Sender: TObject);
|
||||
begin
|
||||
FArrow.Visible := cbArrowVisible.Checked;
|
||||
DoChange;
|
||||
end;
|
||||
|
||||
procedure TChartArrowFrame.DoChange;
|
||||
begin
|
||||
lblArrowBaseLength.Enabled := cbArrowVisible.Checked;
|
||||
seArrowBaseLength.Enabled := cbArrowVisible.Checked;
|
||||
lblArrowLength.Enabled := cbArrowVisible.Checked;
|
||||
seArrowLength.Enabled := cbArrowVisible.Checked;
|
||||
lblArrowWidth.Enabled := cbArrowVisible.Checked;
|
||||
seArrowWidth.Enabled := cbArrowVisible.Checked;
|
||||
end;
|
||||
|
||||
procedure TChartArrowFrame.Prepare(Arrow: TChartArrow);
|
||||
begin
|
||||
FArrow := Arrow;
|
||||
cbArrowVisible.Checked := Arrow.Visible;
|
||||
seArrowBaseLength.Value := Arrow.BaseLength;
|
||||
seArrowLength.Value := Arrow.Length;
|
||||
seArrowWidth.Value := Arrow.Width;
|
||||
DoChange;
|
||||
end;
|
||||
|
||||
procedure TChartArrowFrame.seArrowBaseLengthChange(Sender: TObject);
|
||||
begin
|
||||
FArrow.BaseLength := seArrowBaseLength.Value;
|
||||
end;
|
||||
|
||||
procedure TChartArrowFrame.seArrowLengthChange(Sender: TObject);
|
||||
begin
|
||||
FArrow.Length := seArrowLength.Value;
|
||||
end;
|
||||
|
||||
procedure TChartArrowFrame.seArrowWidthChange(Sender: TObject);
|
||||
begin
|
||||
FArrow.Width := seArrowWidth.Value;
|
||||
end;
|
||||
|
||||
|
||||
end.
|
||||
|
@ -40,9 +40,9 @@ object ChartAxisFrame: TChartAxisFrame
|
||||
Height = 446
|
||||
Top = 25
|
||||
Width = 646
|
||||
ActivePage = pgTitle
|
||||
ActivePage = pgLine
|
||||
Align = alClient
|
||||
TabIndex = 0
|
||||
TabIndex = 3
|
||||
TabOrder = 1
|
||||
OnChanging = PageControlChanging
|
||||
object pgTitle: TTabSheet
|
||||
@ -62,12 +62,13 @@ object ChartAxisFrame: TChartAxisFrame
|
||||
TabOrder = 0
|
||||
object lblTitle: TLabel
|
||||
AnchorSideLeft.Control = TitleMemoPanel
|
||||
AnchorSideTop.Control = TitleMemoPanel
|
||||
AnchorSideTop.Control = cbTitleVisible
|
||||
AnchorSideTop.Side = asrBottom
|
||||
Left = 0
|
||||
Height = 15
|
||||
Top = 2
|
||||
Top = 27
|
||||
Width = 21
|
||||
BorderSpacing.Top = 2
|
||||
BorderSpacing.Top = 8
|
||||
Caption = 'Text'
|
||||
end
|
||||
object mmoTitle: TMemo
|
||||
@ -79,32 +80,56 @@ object ChartAxisFrame: TChartAxisFrame
|
||||
AnchorSideBottom.Control = TitleMemoPanel
|
||||
AnchorSideBottom.Side = asrBottom
|
||||
Left = 0
|
||||
Height = 170
|
||||
Top = 21
|
||||
Height = 145
|
||||
Top = 46
|
||||
Width = 622
|
||||
Anchors = [akTop, akLeft, akRight, akBottom]
|
||||
BorderSpacing.Top = 4
|
||||
OnChange = mmoTitleChange
|
||||
ScrollBars = ssAutoBoth
|
||||
TabOrder = 0
|
||||
WordWrap = False
|
||||
end
|
||||
object cbTitleVisible: TCheckBox
|
||||
AnchorSideTop.Control = lblTitle
|
||||
AnchorSideTop.Side = asrCenter
|
||||
AnchorSideRight.Control = TitleMemoPanel
|
||||
AnchorSideLeft.Control = TitleMemoPanel
|
||||
AnchorSideTop.Control = TitleMemoPanel
|
||||
AnchorSideRight.Side = asrBottom
|
||||
Left = 568
|
||||
Left = 0
|
||||
Height = 19
|
||||
Top = 0
|
||||
Width = 54
|
||||
Alignment = taLeftJustify
|
||||
Anchors = [akTop, akRight]
|
||||
Caption = 'Visible'
|
||||
Checked = True
|
||||
OnChange = cbTitleVisibleChange
|
||||
State = cbChecked
|
||||
TabOrder = 1
|
||||
end
|
||||
object cbTitleHTML: TCheckBox
|
||||
AnchorSideLeft.Control = cbTitleWordwrap
|
||||
AnchorSideLeft.Side = asrBottom
|
||||
AnchorSideTop.Control = cbTitleVisible
|
||||
Left = 193
|
||||
Height = 19
|
||||
Top = 0
|
||||
Width = 156
|
||||
BorderSpacing.Left = 32
|
||||
Caption = 'Support HTML in title text'
|
||||
OnChange = cbTitleHTMLChange
|
||||
TabOrder = 2
|
||||
end
|
||||
object cbTitleWordwrap: TCheckBox
|
||||
AnchorSideLeft.Control = cbTitleVisible
|
||||
AnchorSideLeft.Side = asrBottom
|
||||
AnchorSideTop.Control = cbTitleVisible
|
||||
Left = 86
|
||||
Height = 19
|
||||
Top = 0
|
||||
Width = 75
|
||||
BorderSpacing.Left = 32
|
||||
Caption = 'Wordwrap'
|
||||
OnChange = cbTitleWordwrapChange
|
||||
TabOrder = 3
|
||||
end
|
||||
end
|
||||
object TitleParamsPanel: TPanel
|
||||
Left = 8
|
||||
@ -598,19 +623,19 @@ object ChartAxisFrame: TChartAxisFrame
|
||||
Left = 8
|
||||
Height = 119
|
||||
Top = 8
|
||||
Width = 400
|
||||
Width = 446
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
BorderSpacing.Left = 8
|
||||
BorderSpacing.Top = 8
|
||||
Caption = 'gbFrame'
|
||||
ClientHeight = 99
|
||||
ClientWidth = 396
|
||||
ClientWidth = 442
|
||||
TabOrder = 0
|
||||
object cbFrameVisible: TCheckBox
|
||||
Left = 16
|
||||
Height = 19
|
||||
Top = 8
|
||||
Width = 364
|
||||
Width = 410
|
||||
Align = alTop
|
||||
BorderSpacing.Left = 16
|
||||
BorderSpacing.Top = 8
|
||||
@ -630,18 +655,18 @@ object ChartAxisFrame: TChartAxisFrame
|
||||
Left = 8
|
||||
Height = 137
|
||||
Top = 143
|
||||
Width = 400
|
||||
Width = 446
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
BorderSpacing.Top = 16
|
||||
Caption = 'gbAxisLine'
|
||||
ClientHeight = 117
|
||||
ClientWidth = 396
|
||||
ClientWidth = 442
|
||||
TabOrder = 1
|
||||
object cbAxisLineVisible: TCheckBox
|
||||
Left = 16
|
||||
Height = 19
|
||||
Top = 8
|
||||
Width = 364
|
||||
Width = 410
|
||||
Align = alTop
|
||||
BorderSpacing.Left = 16
|
||||
BorderSpacing.Top = 8
|
||||
@ -658,113 +683,15 @@ object ChartAxisFrame: TChartAxisFrame
|
||||
AnchorSideTop.Control = gbFrame
|
||||
AnchorSideRight.Control = pgLine
|
||||
AnchorSideRight.Side = asrBottom
|
||||
Left = 432
|
||||
Height = 156
|
||||
Left = 478
|
||||
Height = 131
|
||||
Top = 8
|
||||
Width = 200
|
||||
Width = 152
|
||||
Anchors = [akTop, akRight]
|
||||
AutoSize = True
|
||||
BorderSpacing.Left = 24
|
||||
BorderSpacing.Right = 6
|
||||
Caption = 'Arrow'
|
||||
ClientHeight = 136
|
||||
ClientWidth = 196
|
||||
BorderSpacing.Right = 8
|
||||
Caption = 'gbArrow'
|
||||
TabOrder = 2
|
||||
object cbArrowVisible: TCheckBox
|
||||
AnchorSideLeft.Control = gbArrow
|
||||
AnchorSideTop.Control = gbArrow
|
||||
Left = 16
|
||||
Height = 19
|
||||
Top = 8
|
||||
Width = 54
|
||||
BorderSpacing.Left = 16
|
||||
BorderSpacing.Top = 8
|
||||
Caption = 'Visible'
|
||||
OnChange = cbArrowVisibleChange
|
||||
TabOrder = 0
|
||||
end
|
||||
object lblArrowBaseLength: TLabel
|
||||
AnchorSideLeft.Control = cbArrowVisible
|
||||
AnchorSideTop.Control = seArrowBaseLength
|
||||
AnchorSideTop.Side = asrCenter
|
||||
Left = 16
|
||||
Height = 15
|
||||
Top = 39
|
||||
Width = 61
|
||||
Caption = 'Base length'
|
||||
end
|
||||
object lblArrowLength: TLabel
|
||||
AnchorSideLeft.Control = cbArrowVisible
|
||||
AnchorSideTop.Control = seArrowLength
|
||||
AnchorSideTop.Side = asrCenter
|
||||
Left = 16
|
||||
Height = 15
|
||||
Top = 70
|
||||
Width = 37
|
||||
Caption = 'Length'
|
||||
end
|
||||
object lblArrowWidth: TLabel
|
||||
AnchorSideLeft.Control = cbArrowVisible
|
||||
AnchorSideTop.Control = seArrowWidth
|
||||
AnchorSideTop.Side = asrCenter
|
||||
Left = 16
|
||||
Height = 15
|
||||
Top = 101
|
||||
Width = 32
|
||||
Caption = 'Width'
|
||||
end
|
||||
object seArrowBaseLength: TSpinEdit
|
||||
AnchorSideLeft.Control = lblArrowBaseLength
|
||||
AnchorSideLeft.Side = asrBottom
|
||||
AnchorSideTop.Control = cbArrowVisible
|
||||
AnchorSideTop.Side = asrBottom
|
||||
Left = 101
|
||||
Height = 23
|
||||
Top = 35
|
||||
Width = 79
|
||||
Alignment = taRightJustify
|
||||
BorderSpacing.Left = 24
|
||||
BorderSpacing.Top = 8
|
||||
BorderSpacing.Right = 16
|
||||
MaxValue = 1000
|
||||
OnChange = seArrowBaseLengthChange
|
||||
TabOrder = 1
|
||||
end
|
||||
object seArrowLength: TSpinEdit
|
||||
AnchorSideLeft.Control = seArrowBaseLength
|
||||
AnchorSideTop.Control = seArrowBaseLength
|
||||
AnchorSideTop.Side = asrBottom
|
||||
AnchorSideRight.Control = seArrowBaseLength
|
||||
AnchorSideRight.Side = asrBottom
|
||||
Left = 101
|
||||
Height = 23
|
||||
Top = 66
|
||||
Width = 79
|
||||
Alignment = taRightJustify
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
BorderSpacing.Top = 8
|
||||
MaxValue = 1000
|
||||
OnChange = seArrowLengthChange
|
||||
TabOrder = 2
|
||||
end
|
||||
object seArrowWidth: TSpinEdit
|
||||
AnchorSideLeft.Control = seArrowBaseLength
|
||||
AnchorSideTop.Control = seArrowLength
|
||||
AnchorSideTop.Side = asrBottom
|
||||
AnchorSideRight.Control = seArrowBaseLength
|
||||
AnchorSideRight.Side = asrBottom
|
||||
Left = 101
|
||||
Height = 23
|
||||
Top = 97
|
||||
Width = 79
|
||||
Alignment = taRightJustify
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
BorderSpacing.Top = 8
|
||||
BorderSpacing.Bottom = 16
|
||||
MaxValue = 1000
|
||||
OnChange = seArrowWidthChange
|
||||
TabOrder = 3
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -1,7 +1,6 @@
|
||||
unit ceAxisFrame;
|
||||
|
||||
{$MODE ObjFPC}{$H+}
|
||||
{.$DEFINE WYSIWYG_AXISTITLE}
|
||||
|
||||
interface
|
||||
|
||||
@ -9,7 +8,7 @@ uses
|
||||
Classes, SysUtils, Graphics, Forms,
|
||||
Controls, ExtCtrls, ComCtrls, StdCtrls, Dialogs, Spin,
|
||||
TATextElements, TAChartAxis, TAGraph,
|
||||
ceFontFrame, cePenFrame, ceShapeBrushPenMarginsFrame;
|
||||
ceFontFrame, cePenFrame, ceShapeBrushPenMarginsFrame, ceArrowFrame;
|
||||
|
||||
type
|
||||
TChartAxisEditorPage = (aepTitle, aepLabels, aepGrid, aepLine);
|
||||
@ -18,7 +17,6 @@ type
|
||||
TChartAxisFrame = class(TFrame)
|
||||
Bevel1: TBevel;
|
||||
Bevel2: TBevel;
|
||||
cbArrowVisible: TCheckBox;
|
||||
cbAutoMax: TCheckBox;
|
||||
cbAutoMin: TCheckBox;
|
||||
cbAxisLineVisible: TCheckBox;
|
||||
@ -29,6 +27,8 @@ type
|
||||
cbShow: TCheckBox;
|
||||
cbTickColor: TColorButton;
|
||||
cbTitleVisible: TCheckBox;
|
||||
cbTitleHTML: TCheckBox;
|
||||
cbTitleWordwrap: TCheckBox;
|
||||
edLabelFormat: TEdit;
|
||||
gbArrow: TGroupBox;
|
||||
gbAxisLine: TGroupBox;
|
||||
@ -41,9 +41,6 @@ type
|
||||
gbTicks: TGroupBox;
|
||||
gbTitleFont: TGroupBox;
|
||||
gbTitleShapeBrushPenMargins: TGroupBox;
|
||||
lblArrowBaseLength: TLabel;
|
||||
lblArrowLength: TLabel;
|
||||
lblArrowWidth: TLabel;
|
||||
lblAutomatic: TLabel;
|
||||
lblLabelDistance: TLabel;
|
||||
lblLabelFormat: TLabel;
|
||||
@ -59,9 +56,6 @@ type
|
||||
pgLine: TTabSheet;
|
||||
pgTitle: TTabSheet;
|
||||
rgTitleAlignment: TRadioGroup;
|
||||
seArrowBaseLength: TSpinEdit;
|
||||
seArrowLength: TSpinEdit;
|
||||
seArrowWidth: TSpinEdit;
|
||||
seLabelDistance: TSpinEdit;
|
||||
seMaximum: TFloatSpinEdit;
|
||||
seMinimum: TFloatSpinEdit;
|
||||
@ -71,7 +65,6 @@ type
|
||||
Spacer: TBevel;
|
||||
TitleMemoPanel: TPanel;
|
||||
TitleParamsPanel: TPanel;
|
||||
procedure cbArrowVisibleChange(Sender: TObject);
|
||||
procedure cbAutoMaxChange(Sender: TObject);
|
||||
procedure cbAutoMinChange(Sender: TObject);
|
||||
procedure cbAxisLineVisibleChange(Sender: TObject);
|
||||
@ -81,14 +74,13 @@ type
|
||||
procedure cbLabelsVisibleChange(Sender: TObject);
|
||||
procedure cbShowChange(Sender: TObject);
|
||||
procedure cbTickColorColorChanged(Sender: TObject);
|
||||
procedure cbTitleHTMLChange(Sender: TObject);
|
||||
procedure cbTitleVisibleChange(Sender: TObject);
|
||||
procedure cbTitleWordwrapChange(Sender: TObject);
|
||||
procedure edLabelFormatEditingDone(Sender: TObject);
|
||||
procedure mmoTitleChange(Sender: TObject);
|
||||
procedure PageControlChanging(Sender: TObject; var AllowChange: Boolean);
|
||||
procedure rgTitleAlignmentClick(Sender: TObject);
|
||||
procedure seArrowBaseLengthChange(Sender: TObject);
|
||||
procedure seArrowLengthChange(Sender: TObject);
|
||||
procedure seArrowWidthChange(Sender: TObject);
|
||||
procedure seLabelDistanceChange(Sender: TObject);
|
||||
procedure seMaximumChange(Sender: TObject);
|
||||
procedure seMinimumChange(Sender: TObject);
|
||||
@ -105,6 +97,7 @@ type
|
||||
FFramePenFrame: TChartPenFrame;
|
||||
FAxisLinePenFrame: TChartPenFrame;
|
||||
FLabelShapeBrushPenMarginsFrame: TChartShapeBrushPenMarginsFrame;
|
||||
FArrowFrame: TChartArrowFrame;
|
||||
|
||||
function GetAlignment(AItemIndex: Integer): TAlignment;
|
||||
function GetAlignmentIndex(AValue: TAlignment): Integer;
|
||||
@ -115,8 +108,6 @@ type
|
||||
procedure LabelChangedHandler(Sender: TObject);
|
||||
procedure LabelFontChangedHandler(Sender: TObject);
|
||||
procedure LabelShapeChangedHandler(AShape: TChartLabelShape);
|
||||
procedure TitleChangedHandler(Sender: TObject);
|
||||
procedure TitleFontChangedHandler(Sender: TObject);
|
||||
procedure TitleShapeChangedHandler(AShape: TChartLabelShape);
|
||||
protected
|
||||
procedure CalculatePreferredSize(var PreferredWidth, PreferredHeight: integer;
|
||||
@ -124,6 +115,7 @@ type
|
||||
function GetChart: TChart;
|
||||
function GetRealAxisMax: Double;
|
||||
function GetRealAxisMin: Double;
|
||||
procedure UpdateControlState;
|
||||
public
|
||||
constructor Create(AOwner: TComponent); override;
|
||||
procedure Prepare(Axis: TChartAxis);
|
||||
@ -136,7 +128,7 @@ implementation
|
||||
{$R *.lfm}
|
||||
|
||||
uses
|
||||
Math,
|
||||
Math, TAChartUtils,
|
||||
ceUtils;
|
||||
|
||||
constructor TChartAxisFrame.Create(AOwner: TComponent);
|
||||
@ -144,87 +136,96 @@ begin
|
||||
inherited;
|
||||
|
||||
FTitleFontFrame := TChartFontFrame.Create(self);
|
||||
FTitleFontFrame.Parent := gbTitleFont;
|
||||
FTitleFontFrame.Name := '';
|
||||
FTitleFontFrame.Align := alClient;
|
||||
FTitleFontFrame.BorderSpacing.Left := 8;
|
||||
FTitleFontFrame.BorderSpacing.Right := 8;
|
||||
FTitleFontFrame.OnChange := @TitleFontChangedHandler;
|
||||
FTitleFontFrame.Parent := gbTitleFont;
|
||||
gbTitleFont.AutoSize := true;
|
||||
gbTitleFont.Caption := 'Font';
|
||||
|
||||
FTitleShapeBrushPenMarginsFrame := TChartShapeBrushPenMarginsFrame.Create(self);
|
||||
FTitleShapeBrushPenMarginsFrame.Parent := gbTitleShapeBrushPenMargins;
|
||||
FTitleShapeBrushPenMarginsFrame.Name := '';
|
||||
FTitleShapeBrushPenMarginsFrame.Align := alClient;
|
||||
FTitleShapeBrushPenMarginsFrame.BorderSpacing.Left := 8;
|
||||
FTitleShapeBrushPenMarginsFrame.BorderSpacing.Right := 8;
|
||||
FTitleShapeBrushPenMarginsFrame.BorderSpacing.Bottom := 8;
|
||||
FTitleShapeBrushPenMarginsFrame.OnChange := @TitleChangedHandler;
|
||||
FTitleShapeBrushPenMarginsFrame.OnShapeChange := @TitleShapeChangedHandler;
|
||||
FTitleShapeBrushPenMarginsFrame.AutoSize := true;
|
||||
FTitleShapeBrushPenMarginsFrame.Parent := gbTitleShapeBrushPenMargins;
|
||||
gbTitleShapeBrushPenMargins.AutoSize := true;
|
||||
gbTitleShapeBrushPenMargins.Caption := 'Title background';
|
||||
|
||||
FLabelFontFrame := TChartFontFrame.Create(self);
|
||||
FLabelFontFrame.Parent := gbLabelFont;
|
||||
FLabelFontFrame.Name := '';
|
||||
FLabelFontFrame.Align := alClient;
|
||||
FLabelFontFrame.BorderSpacing.Left := 8;
|
||||
FLabelFontFrame.BorderSpacing.Right := 8;
|
||||
FLabelFontFrame.Parent := gbLabelFont;
|
||||
FLabelFontFrame.OnChange := @LabelFontChangedHandler;
|
||||
gbLabelFont.AutoSize := true;
|
||||
gbLabelFont.Caption := 'Label font';
|
||||
|
||||
FLabelShapeBrushPenMarginsFrame := TChartShapeBrushPenMarginsFrame.Create(self);
|
||||
FLabelShapeBrushPenMarginsFrame.Parent := gbShapeFillBorder;
|
||||
FLabelShapeBrushPenMarginsFrame.Name := '';
|
||||
FLabelShapeBrushPenMarginsFrame.Align := alClient;
|
||||
FLabelShapeBrushPenMarginsFrame.BorderSpacing.Left := 8;
|
||||
FLabelShapeBrushPenMarginsFrame.BorderSpacing.Right := 8;
|
||||
FLabelShapeBrushPenMarginsFrame.BorderSpacing.Bottom := 8;
|
||||
FLabelShapeBrushPenMarginsFrame.OnChange := @LabelChangedHandler;
|
||||
FLabelShapeBrushPenMarginsFrame.OnShapeChange := @LabelShapeChangedHandler;
|
||||
FLabelShapeBrushPenMarginsFrame.AutoSize := true;
|
||||
FLabelShapeBrushPenMarginsFrame.Parent := gbShapeFillBorder;
|
||||
gbShapeFillBorder.AutoSize := true;
|
||||
gbShapeFillBorder.Caption := 'Label background';
|
||||
|
||||
FGridPenFrame := TChartPenFrame.Create(Self);
|
||||
FGridPenFrame.Parent := gbGrid;
|
||||
FGridPenFrame.Name := '';
|
||||
FGridPenFrame.Align := alTop;
|
||||
FGridPenFrame.Top := 1000;
|
||||
FGridPenFrame.BorderSpacing.Left := 16;
|
||||
FGridPenFrame.BorderSpacing.Right := 16;
|
||||
FGridPenFrame.BorderSpacing.Bottom := 16;
|
||||
FGridPenFrame.Parent := gbGrid;
|
||||
FGridPenFrame.OnChange := @ChangedHandler;
|
||||
gbGrid.AutoSize := true;
|
||||
gbGrid.Caption := 'Grid lines';
|
||||
|
||||
FFramePenFrame := TChartPenFrame.Create(Self);
|
||||
FFramePenFrame.Parent := gbFrame;
|
||||
FFramePenFrame.Name := '';
|
||||
FFramePenFrame.Align := alTop;
|
||||
FFramePenFrame.Top := 1000;
|
||||
FFramePenFrame.BorderSpacing.Left := 16;
|
||||
FFramePenFrame.BorderSpacing.Right := 16;
|
||||
FFramePenFrame.BorderSpacing.Bottom := 16;
|
||||
FFramePenFrame.OnChange := @ChangedHandler;
|
||||
FFramePenFrame.Parent := gbFrame;
|
||||
// FFramePenFrame.OnChange := @ChangedHandler;
|
||||
gbFrame.AutoSize := true;
|
||||
gbFrame.Caption := 'Frame';
|
||||
|
||||
FAxisLinePenFrame := TChartPenFrame.Create(Self);
|
||||
FAxisLinePenFrame.Parent := gbAxisLine;
|
||||
FAxisLinePenFrame.Name := '';
|
||||
FAxisLinePenFrame.Align := alTop;
|
||||
FAxisLinePenFrame.Top := 1000;
|
||||
FAxisLinePenFrame.BorderSpacing.Left := 16;
|
||||
FAxisLinePenFrame.BorderSpacing.Right := 16;
|
||||
FAxisLinePenFrame.BorderSpacing.Bottom := 16;
|
||||
FAxisLinePenFrame.OnChange := @ChangedHandler;
|
||||
FAxisLinePenFrame.Parent := gbAxisLine;
|
||||
// FAxisLinePenFrame.OnChange := @ChangedHandler;
|
||||
gbAxisLine.AutoSize := true;
|
||||
gbAxisLine.Caption := 'Axis line';
|
||||
|
||||
FArrowFrame := TChartArrowFrame.Create(self);
|
||||
FArrowFrame.Name := '';
|
||||
FArrowFrame.Align := alClient;
|
||||
FArrowFrame.BorderSpacing.Top := 8;
|
||||
FArrowFrame.BorderSpacing.Left := 16;
|
||||
FArrowFrame.BorderSpacing.Right := 16;
|
||||
FArrowFrame.BorderSpacing.Bottom := 16;
|
||||
FArrowFrame.AutoSize := true;
|
||||
FArrowFrame.Parent := gbArrow;
|
||||
gbArrow.AutoSize := true;
|
||||
gbArrow.Caption := 'Arrow';
|
||||
|
||||
BoldHeaders(self);
|
||||
|
||||
TitleParamsPanel.AutoSize := true;
|
||||
@ -253,11 +254,6 @@ begin
|
||||
PanelTop.Height;
|
||||
end;
|
||||
|
||||
procedure TChartAxisFrame.cbArrowVisibleChange(Sender: TObject);
|
||||
begin
|
||||
FAxis.Arrow.Visible := cbArrowVisible.Checked;
|
||||
end;
|
||||
|
||||
procedure TChartAxisFrame.cbAutoMaxChange(Sender: TObject);
|
||||
begin
|
||||
FAxis.Range.UseMax := not cbAutoMax.Checked;
|
||||
@ -273,16 +269,19 @@ end;
|
||||
procedure TChartAxisFrame.cbAxisLineVisibleChange(Sender: TObject);
|
||||
begin
|
||||
FAxis.AxisPen.Visible := cbAxisLineVisible.Checked;
|
||||
UpdateControlState;
|
||||
end;
|
||||
|
||||
procedure TChartAxisFrame.cbFrameVisibleChange(Sender: TObject);
|
||||
begin
|
||||
GetChart.Frame.Visible := cbFrameVisible.Checked;
|
||||
UpdateControlState;
|
||||
end;
|
||||
|
||||
procedure TChartAxisFrame.cbGridVisibleChange(Sender: TObject);
|
||||
begin
|
||||
FAxis.Grid.Visible := cbGridVisible.Checked;
|
||||
UpdateControlState;
|
||||
end;
|
||||
|
||||
procedure TChartAxisFrame.cbInvertedChange(Sender: TObject);
|
||||
@ -293,11 +292,13 @@ end;
|
||||
procedure TChartAxisFrame.cbLabelsVisibleChange(Sender: TObject);
|
||||
begin
|
||||
FAxis.Marks{%H-}.Visible := cbLabelsVisible.Checked;
|
||||
UpdateControlState;
|
||||
end;
|
||||
|
||||
procedure TChartAxisFrame.cbShowChange(Sender: TObject);
|
||||
begin
|
||||
FAxis.Visible := cbShow.Checked;
|
||||
PageControl.Visible := cbShow.checked;
|
||||
end;
|
||||
|
||||
procedure TChartAxisFrame.cbTickColorColorChanged(Sender: TObject);
|
||||
@ -305,9 +306,20 @@ begin
|
||||
FAxis.TickColor := cbTickColor.ButtonColor;
|
||||
end;
|
||||
|
||||
procedure TChartAxisFrame.cbTitleHTMLChange(Sender: TObject);
|
||||
begin
|
||||
FAxis.Title.TextFormat := TEXT_FORMAT[cbTitleHTML.Checked];
|
||||
end;
|
||||
|
||||
procedure TChartAxisFrame.cbTitleVisibleChange(Sender: TObject);
|
||||
begin
|
||||
FAxis.Title.Visible := cbTitleVisible.Checked;
|
||||
UpdateControlState;
|
||||
end;
|
||||
|
||||
procedure TChartAxisFrame.cbTitleWordwrapChange(Sender: TObject);
|
||||
begin
|
||||
FAxis.Title.Wordwrap := cbTitleWordwrap.Checked;
|
||||
end;
|
||||
|
||||
procedure TChartAxisFrame.ChangedHandler(Sender: TObject);
|
||||
@ -403,15 +415,9 @@ begin
|
||||
|
||||
// Page "Title"
|
||||
cbTitleVisible.Checked := Axis.Title.Visible;
|
||||
cbTitleWordwrap.Checked := Axis.Title.Wordwrap;
|
||||
cbTitleHTML.Checked := (Axis.Title.TextFormat = tfHTML);
|
||||
mmoTitle.Lines.Text := Axis.Title.Caption;
|
||||
{$IFDEF WYSIWYG_AXISTITLE}
|
||||
mmoTitle.Font := Axis.Title.LabelFont;
|
||||
mmoTitle.Font.Orientation := 0; // Memo has horizontal text only
|
||||
if Axis.Title.LabelBrush.Style <> bsClear then
|
||||
mmoTitle.Color := Axis.Title.LabelBrush.Color
|
||||
else
|
||||
mmoTitle.Color := GetChart.Color;
|
||||
{$ENDIF}
|
||||
with Axis.Title do begin
|
||||
rgTitleAlignment.ItemIndex := GetAlignmentIndex(Alignment);
|
||||
seTitleDistance.Value := Distance;
|
||||
@ -438,49 +444,38 @@ begin
|
||||
end;
|
||||
|
||||
// Page "Grid"
|
||||
cbGridVisible.Checked := FAxis.Grid.EffVisible;
|
||||
FGridPenFrame.Prepare(FAxis.Grid);
|
||||
cbGridVisible.Checked := Axis.Grid.EffVisible;
|
||||
FGridPenFrame.Prepare(Axis.Grid);
|
||||
|
||||
// Page "Line"
|
||||
cbFrameVisible.Checked := GetChart.Frame.EffVisible;
|
||||
FFramePenFrame.Prepare(GetChart.Frame);
|
||||
cbAxisLineVisible.Checked := FAxis.AxisPen.EffVisible;
|
||||
FAxisLinePenFrame.Prepare(FAxis.AxisPen);
|
||||
cbArrowVisible.Checked := FAxis.Arrow.Visible;
|
||||
seArrowBaseLength.Value := FAxis.Arrow.BaseLength;
|
||||
seArrowLength.Value := FAxis.Arrow.Length;
|
||||
seArrowWidth.Value := FAxis.Arrow.Width;
|
||||
cbAxisLineVisible.Checked := Axis.AxisPen.EffVisible;
|
||||
FAxisLinePenFrame.Prepare(Axis.AxisPen);
|
||||
FArrowFrame.Prepare(Axis.Arrow);
|
||||
|
||||
UpdateControlState;
|
||||
end;
|
||||
|
||||
procedure TChartAxisFrame.rgTitleAlignmentClick(Sender: TObject);
|
||||
begin
|
||||
FAxis.Title.Alignment := GetAlignment(rgTitleAlignment.ItemIndex);
|
||||
end;
|
||||
|
||||
procedure TChartAxisFrame.seArrowBaseLengthChange(Sender: TObject);
|
||||
begin
|
||||
FAxis.Arrow.BaseLength := seArrowBaseLength.value;
|
||||
end;
|
||||
|
||||
procedure TChartAxisFrame.seArrowLengthChange(Sender: TObject);
|
||||
begin
|
||||
FAxis.Arrow.Length := seArrowLength.Value;
|
||||
end;
|
||||
|
||||
procedure TChartAxisFrame.seArrowWidthChange(Sender: TObject);
|
||||
begin
|
||||
FAxis.Arrow.Width := seArrowWidth.Value;
|
||||
if Assigned(FAxis) then
|
||||
FAxis.Title.Alignment := GetAlignment(rgTitleAlignment.ItemIndex);
|
||||
end;
|
||||
|
||||
procedure TChartAxisFrame.seLabelDistanceChange(Sender: TObject);
|
||||
begin
|
||||
FAxis.Marks{%H-}.Distance := seLabelDistance.Value;
|
||||
if Assigned(FAxis) then
|
||||
FAxis.Marks{%H-}.Distance := seLabelDistance.Value;
|
||||
end;
|
||||
|
||||
procedure TChartAxisFrame.seMaximumChange(Sender: TObject);
|
||||
begin
|
||||
FAxis.Range.Max := seMaximum.Value;
|
||||
cbAutoMax.Checked := false;
|
||||
if Assigned(FAxis) then
|
||||
begin
|
||||
FAxis.Range.Max := seMaximum.Value;
|
||||
cbAutoMax.Checked := false;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TChartAxisFrame.seMinimumChange(Sender: TObject);
|
||||
@ -496,36 +491,20 @@ end;
|
||||
|
||||
procedure TChartAxisFrame.seTickLengthChange(Sender: TObject);
|
||||
begin
|
||||
FAxis.TickLength := seTickLength.Value;
|
||||
if Assigned(FAxis) then
|
||||
FAxis.TickLength := seTickLength.Value;
|
||||
end;
|
||||
|
||||
procedure TChartAxisFrame.seTickInnerLengthChange(Sender: TObject);
|
||||
begin
|
||||
FAxis.TickInnerLength := seTickInnerLength.Value;
|
||||
if Assigned(FAxis) then
|
||||
FAxis.TickInnerLength := seTickInnerLength.Value;
|
||||
end;
|
||||
|
||||
procedure TChartAxisFrame.seTitleDistanceChange(Sender: TObject);
|
||||
begin
|
||||
FAxis.Title.Distance := seTitleDistance.Value;
|
||||
end;
|
||||
|
||||
procedure TChartAxisFrame.TitleChangedHandler(Sender: TObject);
|
||||
begin
|
||||
{$IFDEF WYSIWYG_AXISTITLE}
|
||||
if FAxis.Title.LabelBrush.Style <> bsClear then
|
||||
mmoTitle.Color := FAxis.Title.LabelBrush.Color
|
||||
else
|
||||
mmoTitle.Color := GetChart.Color;
|
||||
{$ENDIF}
|
||||
GetChart.Invalidate;
|
||||
end;
|
||||
|
||||
procedure TChartAxisFrame.TitleFontChangedHandler(Sender: TObject);
|
||||
begin
|
||||
{$IFDEF WYSIWYG_AXISTITLE}
|
||||
mmoTitle.Font.Assign(FAxis.Title.LabelFont);
|
||||
mmoTitle.Font.Orientation := 0;
|
||||
{$ENDIF}
|
||||
if Assigned(FAxis) then
|
||||
FAxis.Title.Distance := seTitleDistance.Value;
|
||||
end;
|
||||
|
||||
procedure TChartAxisFrame.TitleShapeChangedHandler(AShape: TChartLabelShape);
|
||||
@ -533,6 +512,29 @@ begin
|
||||
FAxis.Title.Shape := AShape;
|
||||
end;
|
||||
|
||||
procedure TChartAxisFrame.UpdateControlstate;
|
||||
begin
|
||||
// title
|
||||
cbTitleWordwrap.Enabled := cbTitleVisible.Checked;
|
||||
cbTitleHTML.Enabled := cbTitleVisible.Checked;
|
||||
lblTitle.Enabled := cbTitleVisible.Checked;
|
||||
mmoTitle.Enabled := cbTitleVisible.Checked;
|
||||
TitleParamsPanel.Enabled := cbTitleVisible.Checked;
|
||||
|
||||
// labels
|
||||
lblLabelFormat.Enabled := cbLabelsVisible.Checked;
|
||||
edlabelFormat.Enabled := cbLabelsVisible.Checked;
|
||||
lblLabelDistance.Enabled := cbLabelsVisible.Checked;
|
||||
seLabelDistance.Enabled := cbLabelsVisible.Checked;
|
||||
|
||||
// grid
|
||||
FGridPenFrame.Enabled := cbGridVisible.Checked;
|
||||
|
||||
// Line
|
||||
FAxisLinePenFrame.Enabled := cbAxisLineVisible.Checked;
|
||||
FFramePenFrame.Enabled := cbFrameVisible.Checked;
|
||||
end;
|
||||
|
||||
function TChartAxisFrame.Validate(out AMsg: String; out AControl: TWinControl): Boolean;
|
||||
begin
|
||||
Result := false;
|
||||
|
@ -1,4 +1,4 @@
|
||||
object BrushFrame: TChartBrushFrame
|
||||
object ChartBrushFrame: TChartBrushFrame
|
||||
Left = 0
|
||||
Height = 24
|
||||
Top = 0
|
||||
@ -38,7 +38,6 @@ object BrushFrame: TChartBrushFrame
|
||||
Top = 5
|
||||
Width = 25
|
||||
Caption = 'Style'
|
||||
ParentColor = False
|
||||
end
|
||||
object cbBrushColor: TColorButton
|
||||
AnchorSideLeft.Side = asrBottom
|
||||
|
@ -21,12 +21,10 @@ type
|
||||
FBrush: TBrush;
|
||||
FOnChange: TNotifyEvent;
|
||||
procedure DoChanged;
|
||||
|
||||
public
|
||||
constructor Create(AOwner: TComponent); override;
|
||||
procedure Prepare(ABrush: TBrush);
|
||||
property OnChange: TNotifyEvent read FOnChange write FOnChange;
|
||||
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
@ -21,13 +21,11 @@ object ChartEditorForm: TChartEditorForm
|
||||
OKButton.OnClick = OKButtonClick
|
||||
HelpButton.Name = 'HelpButton'
|
||||
HelpButton.DefaultCaption = True
|
||||
CloseButton.Name = 'ApplyButton'
|
||||
CloseButton.Caption = 'Apply'
|
||||
CloseButton.OnClick = ApplyButtonClick
|
||||
CloseButton.Name = 'CloseButton'
|
||||
CancelButton.Name = 'CancelButton'
|
||||
CancelButton.DefaultCaption = True
|
||||
TabOrder = 0
|
||||
ShowButtons = [pbOK, pbCancel, pbClose]
|
||||
ShowButtons = [pbOK, pbCancel]
|
||||
end
|
||||
object Tree: TTreeView
|
||||
Left = 6
|
||||
|
@ -6,7 +6,7 @@ interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ButtonPanel, ComCtrls,
|
||||
ExtCtrls, StdCtrls,
|
||||
ExtCtrls, StdCtrls, Buttons,
|
||||
TAGraph, TAChartAxis, TACustomSeries, TASeries, TAChartImageList,
|
||||
ceAxisFrame;
|
||||
|
||||
@ -15,7 +15,7 @@ type
|
||||
{ TChartEditorForm }
|
||||
|
||||
TChartEditorForm = class(TForm)
|
||||
ApplyButton: TPanelBitBtn;
|
||||
CloseButton: TPanelBitBtn;
|
||||
ButtonPanel: TButtonPanel;
|
||||
Image1: TImage;
|
||||
Label1: TLabel;
|
||||
@ -23,7 +23,6 @@ type
|
||||
TitlePanel: TPanel;
|
||||
Splitter1: TSplitter;
|
||||
Tree: TTreeView;
|
||||
procedure ApplyButtonClick(Sender: TObject);
|
||||
procedure FormActivate(Sender: TObject);
|
||||
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
|
||||
procedure FormCreate(Sender: TObject);
|
||||
@ -43,8 +42,10 @@ type
|
||||
FAxesNode: TTreeNode;
|
||||
FSeriesNode: TTreeNode;
|
||||
FOKClicked: Boolean;
|
||||
FApplyButton: TBitBtn;
|
||||
function AddFrame(AParentNode: TTreeNode; ACaption: String; AFrame: TFrame;
|
||||
AImageIndex: Integer): TTreeNode;
|
||||
procedure ApplyButtonClick(Sender: TObject);
|
||||
procedure FindComponentClass({%H-}AReader: TReader; const AClassName: String;
|
||||
var AClass: TComponentClass);
|
||||
function GetPageIndexOfNode(ANode: TTreeNode): Integer;
|
||||
@ -213,6 +214,20 @@ begin
|
||||
end;
|
||||
|
||||
procedure TChartEditorForm.ApplyButtonClick(Sender: TObject);
|
||||
var
|
||||
msg: String;
|
||||
C: TWinControl;
|
||||
begin
|
||||
if not Validate(Tree.Selected, msg, C) then
|
||||
begin
|
||||
C.SetFocus;
|
||||
MessageDlg(msg, mtError, [mbOK], 0);
|
||||
ModalResult := mrNone;
|
||||
end else
|
||||
SaveChartToStream;
|
||||
end;
|
||||
(*
|
||||
procedure TChartEditorForm.CloseButtonClick(Sender: TObject);
|
||||
var
|
||||
msg: String;
|
||||
C: TWinControl;
|
||||
@ -225,7 +240,7 @@ begin
|
||||
end else
|
||||
RestoreChartFromStream;
|
||||
end;
|
||||
|
||||
*)
|
||||
procedure TChartEditorForm.FormActivate(Sender: TObject);
|
||||
var
|
||||
w: Integer = 0;
|
||||
@ -318,6 +333,15 @@ begin
|
||||
Tree.Items.EndUpdate;
|
||||
end;
|
||||
|
||||
FApplyButton := TBitBtn.Create(ButtonPanel);
|
||||
FApplyButton.Caption := 'Apply';
|
||||
FApplyButton.Images := ChartImagesDM.ChartImages;
|
||||
FApplyButton.ImageIndex := 7;
|
||||
FApplyButton.AutoSize := true;
|
||||
FApplyButton.OnClick := @ApplyButtonClick;
|
||||
FApplyButton.AnchorSideTop.Control := ButtonPanel.OKButton;
|
||||
FApplyButton.Parent := ButtonPanel;
|
||||
|
||||
AutoSize := true;
|
||||
end;
|
||||
|
||||
@ -444,6 +468,7 @@ procedure TChartEditorForm.SaveChartToStream;
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
FSavedChartStream.Position := 0;
|
||||
WriteComponentAsTextToStream(FSavedChartStream, FChart);
|
||||
for i := 0 to FChart.SeriesCount-1 do
|
||||
WriteComponentAsTextToStream(FSavedSeriesStreams[i], FChart.Series[i]);
|
||||
|
@ -1,4 +1,4 @@
|
||||
object FontFrame: TChartFontFrame
|
||||
object ChartFontFrame: TChartFontFrame
|
||||
Left = 0
|
||||
Height = 84
|
||||
Top = 0
|
||||
@ -37,7 +37,7 @@ object FontFrame: TChartFontFrame
|
||||
Font.Style = [fsBold]
|
||||
OnChange = cbBoldChange
|
||||
ParentFont = False
|
||||
TabOrder = 1
|
||||
TabOrder = 2
|
||||
end
|
||||
object cbItalic: TCheckBox
|
||||
AnchorSideLeft.Control = cbBold
|
||||
@ -52,7 +52,7 @@ object FontFrame: TChartFontFrame
|
||||
Font.Style = [fsItalic]
|
||||
OnChange = cbItalicChange
|
||||
ParentFont = False
|
||||
TabOrder = 2
|
||||
TabOrder = 3
|
||||
end
|
||||
object cbUnderline: TCheckBox
|
||||
AnchorSideLeft.Control = cbItalic
|
||||
@ -69,7 +69,7 @@ object FontFrame: TChartFontFrame
|
||||
Font.Style = [fsUnderline]
|
||||
OnChange = cbUnderlineChange
|
||||
ParentFont = False
|
||||
TabOrder = 3
|
||||
TabOrder = 4
|
||||
end
|
||||
object Panel2: TPanel
|
||||
AnchorSideLeft.Control = Owner
|
||||
@ -88,7 +88,7 @@ object FontFrame: TChartFontFrame
|
||||
ChildSizing.ControlsPerLine = 3
|
||||
ClientHeight = 31
|
||||
ClientWidth = 301
|
||||
TabOrder = 4
|
||||
TabOrder = 1
|
||||
object cmbFontSize: TComboBox
|
||||
AnchorSideLeft.Control = Panel2
|
||||
AnchorSideTop.Side = asrCenter
|
||||
@ -127,7 +127,6 @@ object FontFrame: TChartFontFrame
|
||||
Width = 31
|
||||
Caption = 'Angle'
|
||||
FocusControl = seOrientation
|
||||
ParentColor = False
|
||||
end
|
||||
object seOrientation: TSpinEdit
|
||||
AnchorSideLeft.Control = lblOrientation
|
||||
|
@ -34,13 +34,11 @@ type
|
||||
FFont: TFont;
|
||||
FOnChange: TNotifyEvent;
|
||||
procedure DoChanged;
|
||||
|
||||
public
|
||||
constructor Create(AOwner: TComponent); override;
|
||||
procedure GetData(AFont: TFont);
|
||||
procedure Prepare(AFont: TFont; WithOrientation: boolean);
|
||||
property OnChange: TNotifyEvent read FOnChange write FOnChange;
|
||||
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
@ -6,8 +6,8 @@ object ChartLegendFrame: TChartLegendFrame
|
||||
ClientHeight = 400
|
||||
ClientWidth = 671
|
||||
TabOrder = 0
|
||||
DesignLeft = 380
|
||||
DesignTop = 303
|
||||
DesignLeft = 1101
|
||||
DesignTop = 368
|
||||
object PanelTop: TPanel
|
||||
Left = 0
|
||||
Height = 23
|
||||
@ -37,18 +37,30 @@ object ChartLegendFrame: TChartLegendFrame
|
||||
AnchorSideLeft.Side = asrBottom
|
||||
AnchorSideTop.Control = cbShow
|
||||
AnchorSideRight.Side = asrBottom
|
||||
Left = 65
|
||||
Left = 81
|
||||
Height = 19
|
||||
Top = 0
|
||||
Width = 87
|
||||
Alignment = taLeftJustify
|
||||
BorderSpacing.Left = 16
|
||||
BorderSpacing.Left = 32
|
||||
Caption = 'Outside axes'
|
||||
Checked = True
|
||||
OnChange = cbUseSideBarChange
|
||||
State = cbChecked
|
||||
TabOrder = 1
|
||||
end
|
||||
object cbHTML: TCheckBox
|
||||
AnchorSideLeft.Control = cbUseSideBar
|
||||
AnchorSideLeft.Side = asrBottom
|
||||
AnchorSideTop.Control = PanelTop
|
||||
Left = 200
|
||||
Height = 19
|
||||
Top = 0
|
||||
Width = 181
|
||||
BorderSpacing.Left = 32
|
||||
Caption = 'Support HTML in legend items'
|
||||
OnChange = cbHTMLChange
|
||||
TabOrder = 2
|
||||
end
|
||||
end
|
||||
object ParamsPanel: TPanel
|
||||
Left = 0
|
||||
@ -56,7 +68,6 @@ object ChartLegendFrame: TChartLegendFrame
|
||||
Top = 31
|
||||
Width = 671
|
||||
Align = alClient
|
||||
AutoSize = True
|
||||
BevelOuter = bvNone
|
||||
ClientHeight = 369
|
||||
ClientWidth = 671
|
||||
@ -65,94 +76,33 @@ object ChartLegendFrame: TChartLegendFrame
|
||||
AnchorSideLeft.Control = gbAlignment
|
||||
AnchorSideTop.Control = gbAlignment
|
||||
AnchorSideTop.Side = asrBottom
|
||||
AnchorSideRight.Control = Background_Border_Spacer
|
||||
AnchorSideBottom.Side = asrBottom
|
||||
Left = 0
|
||||
Height = 83
|
||||
Height = 72
|
||||
Top = 128
|
||||
Width = 140
|
||||
Width = 127
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
BorderSpacing.Top = 16
|
||||
Caption = 'Background'
|
||||
ClientHeight = 63
|
||||
ClientWidth = 136
|
||||
BorderSpacing.Right = 16
|
||||
Caption = 'gbBackground'
|
||||
TabOrder = 2
|
||||
object cbFilled: TCheckBox
|
||||
AnchorSideLeft.Control = gbBackground
|
||||
AnchorSideTop.Control = gbBackground
|
||||
Left = 8
|
||||
Height = 19
|
||||
Top = 6
|
||||
Width = 48
|
||||
BorderSpacing.Left = 8
|
||||
BorderSpacing.Top = 6
|
||||
Caption = 'Filled'
|
||||
OnChange = cbFilledChange
|
||||
TabOrder = 0
|
||||
end
|
||||
object cbFillColor: TColorBox
|
||||
AnchorSideLeft.Control = cbFilled
|
||||
AnchorSideTop.Control = cbFilled
|
||||
AnchorSideTop.Side = asrBottom
|
||||
Left = 8
|
||||
Height = 22
|
||||
Top = 33
|
||||
Width = 120
|
||||
Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames, cbCustomColors]
|
||||
BorderSpacing.Top = 8
|
||||
BorderSpacing.Right = 8
|
||||
BorderSpacing.Bottom = 8
|
||||
ItemHeight = 16
|
||||
OnChange = cbFillColorChange
|
||||
TabOrder = 1
|
||||
end
|
||||
end
|
||||
object gbBorder: TGroupBox
|
||||
AnchorSideLeft.Control = gbBackground
|
||||
AnchorSideLeft.Side = asrBottom
|
||||
AnchorSideLeft.Control = Background_Border_Spacer
|
||||
AnchorSideTop.Control = gbAlignment
|
||||
AnchorSideTop.Side = asrBottom
|
||||
AnchorSideBottom.Control = gbBackground
|
||||
AnchorSideRight.Control = gbAlignment
|
||||
AnchorSideRight.Side = asrBottom
|
||||
AnchorSideBottom.Side = asrBottom
|
||||
Left = 156
|
||||
Height = 83
|
||||
Left = 143
|
||||
Height = 88
|
||||
Top = 128
|
||||
Width = 140
|
||||
Anchors = [akTop, akLeft, akBottom]
|
||||
BorderSpacing.Left = 16
|
||||
Width = 153
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
BorderSpacing.Top = 16
|
||||
Caption = 'Border'
|
||||
ClientHeight = 63
|
||||
ClientWidth = 136
|
||||
Caption = 'gbBorder'
|
||||
TabOrder = 3
|
||||
object cbShowBorder: TCheckBox
|
||||
AnchorSideLeft.Control = gbBorder
|
||||
AnchorSideTop.Control = gbBorder
|
||||
Left = 8
|
||||
Height = 19
|
||||
Top = 6
|
||||
Width = 54
|
||||
BorderSpacing.Left = 8
|
||||
BorderSpacing.Top = 6
|
||||
Caption = 'Visible'
|
||||
OnChange = cbShowBorderChange
|
||||
TabOrder = 0
|
||||
end
|
||||
object cbBorderColor: TColorBox
|
||||
AnchorSideLeft.Control = cbShowBorder
|
||||
AnchorSideTop.Control = cbShowBorder
|
||||
AnchorSideTop.Side = asrBottom
|
||||
Left = 8
|
||||
Height = 22
|
||||
Top = 33
|
||||
Width = 120
|
||||
Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames]
|
||||
BorderSpacing.Top = 8
|
||||
BorderSpacing.Right = 8
|
||||
BorderSpacing.Bottom = 6
|
||||
ItemHeight = 16
|
||||
OnChange = cbBorderColorChange
|
||||
TabOrder = 1
|
||||
Visible = False
|
||||
end
|
||||
end
|
||||
object gbFont: TGroupBox
|
||||
AnchorSideLeft.Control = gbAlignment
|
||||
@ -288,36 +238,39 @@ object ChartLegendFrame: TChartLegendFrame
|
||||
AnchorSideRight.Side = asrBottom
|
||||
Left = 0
|
||||
Height = 83
|
||||
Top = 224
|
||||
Width = 140
|
||||
Anchors = [akTop, akRight]
|
||||
BorderSpacing.Top = 13
|
||||
Top = 216
|
||||
Width = 127
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
BorderSpacing.Top = 16
|
||||
Caption = 'Margins'
|
||||
ClientHeight = 63
|
||||
ClientWidth = 136
|
||||
ClientWidth = 123
|
||||
TabOrder = 4
|
||||
object lblMarginX: TLabel
|
||||
AnchorSideLeft.Control = gbMargins
|
||||
AnchorSideTop.Control = seMarginX
|
||||
AnchorSideTop.Side = asrCenter
|
||||
AnchorSideRight.Control = seMarginX
|
||||
Left = 31
|
||||
Left = 16
|
||||
Height = 15
|
||||
Top = 8
|
||||
Width = 7
|
||||
Anchors = [akTop, akRight]
|
||||
BorderSpacing.Left = 16
|
||||
BorderSpacing.Right = 8
|
||||
Caption = 'X'
|
||||
FocusControl = seMarginX
|
||||
end
|
||||
object seMarginX: TSpinEdit
|
||||
AnchorSideLeft.Control = lblMarginX
|
||||
AnchorSideLeft.Side = asrBottom
|
||||
AnchorSideTop.Control = gbMargins
|
||||
AnchorSideRight.Side = asrBottom
|
||||
Left = 46
|
||||
Left = 31
|
||||
Height = 23
|
||||
Top = 4
|
||||
Width = 74
|
||||
Width = 76
|
||||
Alignment = taRightJustify
|
||||
Anchors = [akTop, akRight]
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
BorderSpacing.Top = 4
|
||||
BorderSpacing.Right = 10
|
||||
MaxValue = 1000
|
||||
@ -326,30 +279,33 @@ object ChartLegendFrame: TChartLegendFrame
|
||||
Value = 1
|
||||
end
|
||||
object lblMarginY: TLabel
|
||||
AnchorSideLeft.Control = lblMarginX
|
||||
AnchorSideTop.Control = seMarginY
|
||||
AnchorSideTop.Side = asrCenter
|
||||
AnchorSideRight.Control = seMarginY
|
||||
Left = 33
|
||||
Left = 16
|
||||
Height = 15
|
||||
Top = 37
|
||||
Width = 7
|
||||
Anchors = [akTop, akRight]
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
BorderSpacing.Right = 8
|
||||
Caption = 'Y'
|
||||
FocusControl = seMarginY
|
||||
end
|
||||
object seMarginY: TSpinEdit
|
||||
AnchorSideLeft.Control = seMarginX
|
||||
AnchorSideTop.Control = seMarginX
|
||||
AnchorSideTop.Side = asrBottom
|
||||
AnchorSideRight.Control = seMarginX
|
||||
AnchorSideRight.Side = asrBottom
|
||||
Left = 48
|
||||
Left = 31
|
||||
Height = 23
|
||||
Top = 33
|
||||
Width = 74
|
||||
Width = 76
|
||||
Alignment = taRightJustify
|
||||
Anchors = [akTop, akRight]
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
BorderSpacing.Top = 6
|
||||
BorderSpacing.Right = 10
|
||||
BorderSpacing.Bottom = 8
|
||||
MaxValue = 1000
|
||||
OnChange = seMarginYChange
|
||||
TabOrder = 1
|
||||
@ -358,14 +314,20 @@ object ChartLegendFrame: TChartLegendFrame
|
||||
end
|
||||
object gbItems: TGroupBox
|
||||
AnchorSideLeft.Control = gbFont
|
||||
AnchorSideTop.Control = gbBackground
|
||||
AnchorSideTop.Control = gbFont
|
||||
AnchorSideTop.Side = asrBottom
|
||||
AnchorSideRight.Control = gbFont
|
||||
AnchorSideRight.Side = asrBottom
|
||||
Left = 316
|
||||
Height = 179
|
||||
Height = 165
|
||||
Top = 128
|
||||
Width = 222
|
||||
Width = 216
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
AutoSize = True
|
||||
BorderSpacing.Top = 16
|
||||
Caption = 'Items'
|
||||
ClientHeight = 159
|
||||
ClientWidth = 218
|
||||
ClientHeight = 145
|
||||
ClientWidth = 212
|
||||
TabOrder = 5
|
||||
object cbInverted: TCheckBox
|
||||
AnchorSideLeft.Control = gbItems
|
||||
@ -385,7 +347,7 @@ object ChartLegendFrame: TChartLegendFrame
|
||||
AnchorSideTop.Side = asrBottom
|
||||
AnchorSideRight.Control = gbItems
|
||||
AnchorSideRight.Side = asrBottom
|
||||
Left = 114
|
||||
Left = 108
|
||||
Height = 23
|
||||
Top = 33
|
||||
Width = 96
|
||||
@ -407,7 +369,7 @@ object ChartLegendFrame: TChartLegendFrame
|
||||
Left = 8
|
||||
Height = 15
|
||||
Top = 37
|
||||
Width = 98
|
||||
Width = 92
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
BorderSpacing.Right = 8
|
||||
Caption = 'Columns'
|
||||
@ -420,8 +382,8 @@ object ChartLegendFrame: TChartLegendFrame
|
||||
AnchorSideRight.Control = cbItemFillOrder
|
||||
Left = 8
|
||||
Height = 15
|
||||
Top = 68
|
||||
Width = 98
|
||||
Top = 64
|
||||
Width = 92
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
BorderSpacing.Right = 8
|
||||
Caption = 'Item fill order'
|
||||
@ -431,12 +393,12 @@ object ChartLegendFrame: TChartLegendFrame
|
||||
AnchorSideTop.Side = asrBottom
|
||||
AnchorSideRight.Control = gbItems
|
||||
AnchorSideRight.Side = asrBottom
|
||||
Left = 114
|
||||
Left = 108
|
||||
Height = 23
|
||||
Top = 64
|
||||
Top = 60
|
||||
Width = 96
|
||||
Anchors = [akTop, akRight]
|
||||
BorderSpacing.Top = 8
|
||||
BorderSpacing.Top = 4
|
||||
BorderSpacing.Right = 8
|
||||
ItemHeight = 15
|
||||
ItemIndex = 0
|
||||
@ -453,13 +415,13 @@ object ChartLegendFrame: TChartLegendFrame
|
||||
AnchorSideTop.Side = asrBottom
|
||||
AnchorSideRight.Control = gbItems
|
||||
AnchorSideRight.Side = asrBottom
|
||||
Left = 114
|
||||
Left = 108
|
||||
Height = 23
|
||||
Top = 95
|
||||
Top = 87
|
||||
Width = 96
|
||||
Alignment = taRightJustify
|
||||
Anchors = [akTop, akRight]
|
||||
BorderSpacing.Top = 8
|
||||
BorderSpacing.Top = 4
|
||||
BorderSpacing.Right = 8
|
||||
MaxValue = 1000
|
||||
OnChange = seSpacingChange
|
||||
@ -473,8 +435,8 @@ object ChartLegendFrame: TChartLegendFrame
|
||||
AnchorSideRight.Control = seSpacing
|
||||
Left = 8
|
||||
Height = 15
|
||||
Top = 99
|
||||
Width = 98
|
||||
Top = 91
|
||||
Width = 92
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
BorderSpacing.Right = 8
|
||||
Caption = 'Spacing'
|
||||
@ -485,14 +447,15 @@ object ChartLegendFrame: TChartLegendFrame
|
||||
AnchorSideTop.Side = asrBottom
|
||||
AnchorSideRight.Control = gbItems
|
||||
AnchorSideRight.Side = asrBottom
|
||||
Left = 114
|
||||
Left = 108
|
||||
Height = 23
|
||||
Top = 126
|
||||
Top = 114
|
||||
Width = 96
|
||||
Alignment = taRightJustify
|
||||
Anchors = [akTop, akRight]
|
||||
BorderSpacing.Top = 8
|
||||
BorderSpacing.Top = 4
|
||||
BorderSpacing.Right = 8
|
||||
BorderSpacing.Bottom = 8
|
||||
MaxValue = 1000
|
||||
OnChange = seSymbolWidthChange
|
||||
TabOrder = 4
|
||||
@ -505,13 +468,23 @@ object ChartLegendFrame: TChartLegendFrame
|
||||
AnchorSideRight.Control = seSymbolWidth
|
||||
Left = 8
|
||||
Height = 15
|
||||
Top = 130
|
||||
Width = 98
|
||||
Top = 118
|
||||
Width = 92
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
BorderSpacing.Right = 8
|
||||
Caption = 'Symbol width'
|
||||
FocusControl = seSymbolWidth
|
||||
end
|
||||
end
|
||||
object Background_Border_Spacer: TBevel
|
||||
AnchorSideLeft.Control = gbAlignment
|
||||
AnchorSideLeft.Side = asrCenter
|
||||
AnchorSideTop.Control = gbBorder
|
||||
Left = 143
|
||||
Height = 42
|
||||
Top = 128
|
||||
Width = 10
|
||||
Shape = bsSpacer
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -8,7 +8,7 @@ uses
|
||||
Classes, SysUtils, Graphics,
|
||||
Forms, Controls, ExtCtrls, ColorBox, StdCtrls, Spin,
|
||||
TALegend, TAGraph,
|
||||
ceFontFrame;
|
||||
ceFontFrame, ceSimpleBrushFrame, ceSimplePenFrame;
|
||||
|
||||
type
|
||||
|
||||
@ -16,14 +16,12 @@ type
|
||||
|
||||
TChartLegendFrame = class(TFrame)
|
||||
Bevel1: TBevel;
|
||||
cbBorderColor: TColorBox;
|
||||
cbFillColor: TColorBox;
|
||||
cbFilled: TCheckBox;
|
||||
Background_Border_Spacer: TBevel;
|
||||
cbInverted: TCheckBox;
|
||||
cbItemFillOrder: TComboBox;
|
||||
cbShow: TCheckBox;
|
||||
cbShowBorder: TCheckBox;
|
||||
cbUseSideBar: TCheckBox;
|
||||
cbHTML: TCheckBox;
|
||||
gbAlignment: TGroupBox;
|
||||
gbBackground: TGroupBox;
|
||||
gbBorder: TGroupBox;
|
||||
@ -51,12 +49,9 @@ type
|
||||
seMarginY: TSpinEdit;
|
||||
seSpacing: TSpinEdit;
|
||||
seSymbolWidth: TSpinEdit;
|
||||
procedure cbBorderColorChange(Sender: TObject);
|
||||
procedure cbFillColorChange(Sender: TObject);
|
||||
procedure cbFilledChange(Sender: TObject);
|
||||
procedure cbHTMLChange(Sender: TObject);
|
||||
procedure cbInvertedChange(Sender: TObject);
|
||||
procedure cbItemFillOrderChange(Sender: TObject);
|
||||
procedure cbShowBorderChange(Sender: TObject);
|
||||
procedure cbShowChange(Sender: TObject);
|
||||
procedure cbUseSideBarChange(Sender: TObject);
|
||||
procedure gbAlignmentClick(Sender: TObject);
|
||||
@ -68,10 +63,13 @@ type
|
||||
private
|
||||
FLegend: TChartLegend;
|
||||
FFontFrame: TChartFontFrame;
|
||||
procedure ChangedHandler(Sender: TObject);
|
||||
FBackgroundFrame: TSimpleChartBrushFrame;
|
||||
FBorderFrame: TSimpleChartPenFrame;
|
||||
function GetAlignment: TLegendAlignment;
|
||||
procedure SetAlignment(AValue: TLegendAlignment);
|
||||
protected
|
||||
procedure CalculatePreferredSize(var PreferredWidth, PreferredHeight: integer;
|
||||
{%H-}WithThemeSpace: Boolean); override;
|
||||
function GetChart: TChart;
|
||||
public
|
||||
constructor Create(AOwner: TComponent); override;
|
||||
@ -84,6 +82,8 @@ implementation
|
||||
{$R *.lfm}
|
||||
|
||||
uses
|
||||
Math,
|
||||
TATypes, TAChartUtils,
|
||||
ceUtils;
|
||||
|
||||
constructor TChartLegendFrame.Create(AOwner: TComponent);
|
||||
@ -97,30 +97,51 @@ begin
|
||||
FFontFrame.BorderSpacing.Left := 8;
|
||||
FFontFrame.BorderSpacing.Right := 8;
|
||||
FFontFrame.AutoSize := true;
|
||||
FFontFrame.OnChange := @ChangedHandler;
|
||||
gbFont.AutoSize := true;
|
||||
gbFont.Caption := 'Font';
|
||||
|
||||
FBackgroundFrame := TSimpleChartBrushFrame.Create(self);
|
||||
FBackgroundFrame.Name := '';
|
||||
FBackgroundFrame.Align := alClient;
|
||||
FBackgroundFrame.BorderSpacing.Left := 8;
|
||||
FBackgroundFrame.BorderSpacing.Right := 8;
|
||||
FBackgroundFrame.BorderSpacing.Bottom := 8;
|
||||
FBackgroundFrame.Parent := gbBackground;
|
||||
FBackgroundFrame.AutoSize := true;
|
||||
gbBackground.AutoSize := true;
|
||||
gbBackground.Caption := 'Background';
|
||||
|
||||
FBorderFrame := TSimpleChartPenFrame.Create(self);
|
||||
FBorderFrame.Name := '';
|
||||
FBorderFrame.Align := alClient;
|
||||
FBorderFrame.BorderSpacing.Left := 8;
|
||||
FBorderFrame.BorderSpacing.Right := 8;
|
||||
FBorderFrame.BorderSpacing.Bottom := 8;
|
||||
FBorderFrame.AutoSize := true;
|
||||
FBorderFrame.Parent := gbBorder;
|
||||
gbBorder.AutoSize := true;
|
||||
gbBorder.Caption := 'Border';
|
||||
|
||||
BoldHeaders(Self);
|
||||
end;
|
||||
|
||||
procedure TChartLegendFrame.cbBorderColorChange(Sender: TObject);
|
||||
procedure TChartLegendFrame.CalculatePreferredSize(
|
||||
var PreferredWidth, PreferredHeight: integer;
|
||||
WithThemeSpace: Boolean);
|
||||
begin
|
||||
FLegend.Frame.Color := cbBorderColor.Selected;
|
||||
PreferredHeight := PanelTop.Height + PanelTop.BorderSpacing.Bottom +
|
||||
Max(
|
||||
gbAlignment.Height + gbBackground.Height + gbBackground.BorderSpacing.Top +
|
||||
gbMargins.Height + gbMargins.Borderspacing.Top,
|
||||
gbFont.Height + gbItems.Height + gbItems.BorderSpacing.Top
|
||||
);
|
||||
|
||||
PreferredWidth := gbAlignment.Width + gbFont.Width + gbFont.BorderSpacing.Left;
|
||||
end;
|
||||
|
||||
procedure TChartLegendFrame.cbFilledChange(Sender: TObject);
|
||||
procedure TChartLegendFrame.cbHTMLChange(Sender: TObject);
|
||||
begin
|
||||
cbFillColor.Visible := cbFilled.Checked;
|
||||
if cbFilled.Checked then
|
||||
FLegend.BackgroundBrush.Style := bsSolid
|
||||
else
|
||||
FLegend.BackgroundBrush.Style := bsClear;
|
||||
end;
|
||||
|
||||
procedure TChartLegendFrame.cbFillColorChange(Sender: TObject);
|
||||
begin
|
||||
FLegend.BackgroundBrush.Color := cbFillColor.Selected;
|
||||
FLegend.TextFormat := TEXT_FORMAT[cbHTML.Checked];
|
||||
end;
|
||||
|
||||
procedure TChartLegendFrame.cbInvertedChange(Sender: TObject);
|
||||
@ -137,6 +158,7 @@ procedure TChartLegendFrame.cbShowChange(Sender: TObject);
|
||||
begin
|
||||
FLegend.Visible := cbShow.Checked;
|
||||
cbUseSideBar.Visible := cbShow.Checked;
|
||||
cbHTML.Visible := cbShow.Checked;
|
||||
gbAlignment.Visible := cbShow.Checked;
|
||||
gbFont.Visible := cbShow.Checked;
|
||||
gbBackground.Visible := cbShow.Checked;
|
||||
@ -145,53 +167,16 @@ begin
|
||||
gbMargins.Visible := cbShow.Checked;
|
||||
end;
|
||||
|
||||
procedure TChartLegendFrame.cbShowBorderChange(Sender: TObject);
|
||||
begin
|
||||
FLegend.Frame.Visible := cbShowBorder.Checked;
|
||||
cbBorderColor.Visible := cbShowBorder.Checked;
|
||||
end;
|
||||
|
||||
procedure TChartLegendFrame.cbUseSideBarChange(Sender: TObject);
|
||||
begin
|
||||
FLegend.UseSideBar := cbUseSideBar.Checked;
|
||||
end;
|
||||
|
||||
procedure TChartLegendFrame.ChangedHandler(Sender: TObject);
|
||||
begin
|
||||
GetChart.Invalidate;
|
||||
end;
|
||||
|
||||
function TChartLegendFrame.GetChart: TChart;
|
||||
begin
|
||||
Result := FLegend.GetOwner as TChart;
|
||||
end;
|
||||
|
||||
procedure TChartLegendFrame.Prepare(ALegend: TChartLegend);
|
||||
begin
|
||||
FLegend := ALegend;
|
||||
|
||||
cbShow.Checked := ALegend.Visible;
|
||||
SetAlignment(ALegend.Alignment);
|
||||
|
||||
cbFilled.Checked := ALegend.BackgroundBrush.Style <> bsClear;
|
||||
cbFillColor.Selected := ColorToRGB(ALegend.BackgroundBrush.Color);
|
||||
|
||||
cbShowBorder.Checked := (ALegend.Frame.Style <> psClear) and ALegend.Frame.Visible;
|
||||
cbBorderColor.Selected := ColorToRGB(ALegend.Frame.Color);
|
||||
|
||||
seMarginX.Value := ALegend.MarginX;
|
||||
seMarginY.Value := ALegend.MarginY;
|
||||
|
||||
cbUseSideBar.Checked := ALegend.UseSidebar;
|
||||
cbInverted.Checked := ALegend.Inverted;
|
||||
seColumns.Value := ALegend.ColumnCount;
|
||||
seSymbolWidth.Value := ALegend.SymbolWidth;
|
||||
seSpacing.Value := ALegend.Spacing;
|
||||
cbItemFillOrder.ItemIndex := ord(ALegend.ItemFillOrder);
|
||||
|
||||
FFontFrame.Prepare(ALegend.Font, false);
|
||||
end;
|
||||
|
||||
function TChartLegendFrame.GetAlignment: TLegendAlignment;
|
||||
var
|
||||
i: Integer;
|
||||
@ -213,6 +198,29 @@ begin
|
||||
FLegend.Alignment := GetAlignment;
|
||||
end;
|
||||
|
||||
procedure TChartLegendFrame.Prepare(ALegend: TChartLegend);
|
||||
begin
|
||||
FLegend := ALegend;
|
||||
|
||||
cbShow.Checked := ALegend.Visible;
|
||||
cbHTML.Checked := (ALegend.TextFormat = tfHTML);
|
||||
SetAlignment(ALegend.Alignment);
|
||||
|
||||
seMarginX.Value := ALegend.MarginX;
|
||||
seMarginY.Value := ALegend.MarginY;
|
||||
|
||||
cbUseSideBar.Checked := ALegend.UseSidebar;
|
||||
cbInverted.Checked := ALegend.Inverted;
|
||||
seColumns.Value := ALegend.ColumnCount;
|
||||
seSymbolWidth.Value := ALegend.SymbolWidth;
|
||||
seSpacing.Value := ALegend.Spacing;
|
||||
cbItemFillOrder.ItemIndex := ord(ALegend.ItemFillOrder);
|
||||
|
||||
FFontFrame.Prepare(ALegend.Font, false);
|
||||
FBackgroundFrame.Prepare(ALegend.BackgroundBrush);
|
||||
FBorderFrame.Prepare(ALegend.Frame);
|
||||
end;
|
||||
|
||||
procedure TChartLegendFrame.seColumnsChange(Sender: TObject);
|
||||
begin
|
||||
FLegend.ColumnCount := seColumns.Value;
|
||||
|
@ -98,7 +98,7 @@ object MainForm: TMainForm
|
||||
Height = 4
|
||||
Top = 290
|
||||
Width = 613
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
Anchors = [akLeft, akRight, akBottom]
|
||||
Shape = bsBottomLine
|
||||
end
|
||||
object cbDoubleClick: TCheckBox
|
||||
|
198
components/tachart/demo/charteditor/cemarksform.lfm
Normal file
198
components/tachart/demo/charteditor/cemarksform.lfm
Normal file
@ -0,0 +1,198 @@
|
||||
object MarksForm: TMarksForm
|
||||
Left = 983
|
||||
Height = 511
|
||||
Top = 279
|
||||
Width = 535
|
||||
AutoSize = True
|
||||
BorderStyle = bsDialog
|
||||
Caption = 'MarksForm'
|
||||
ClientHeight = 511
|
||||
ClientWidth = 535
|
||||
OnCreate = FormCreate
|
||||
LCLVersion = '2.3.0.0'
|
||||
object ButtonPanel: TButtonPanel
|
||||
Left = 6
|
||||
Height = 34
|
||||
Top = 471
|
||||
Width = 523
|
||||
OKButton.Name = 'OKButton'
|
||||
OKButton.DefaultCaption = True
|
||||
HelpButton.Name = 'HelpButton'
|
||||
HelpButton.DefaultCaption = True
|
||||
CloseButton.Name = 'CloseButton'
|
||||
CloseButton.DefaultCaption = True
|
||||
CancelButton.Name = 'CancelButton'
|
||||
CancelButton.DefaultCaption = True
|
||||
TabOrder = 1
|
||||
ShowButtons = [pbOK, pbCancel]
|
||||
end
|
||||
object Panel1: TPanel
|
||||
Left = 16
|
||||
Height = 439
|
||||
Top = 16
|
||||
Width = 503
|
||||
Align = alClient
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 16
|
||||
BevelOuter = bvNone
|
||||
ClientHeight = 439
|
||||
ClientWidth = 503
|
||||
TabOrder = 0
|
||||
object gbShapeBrushPenMargins: TGroupBox
|
||||
AnchorSideLeft.Control = Panel1
|
||||
AnchorSideTop.Control = gbLabelFont
|
||||
AnchorSideTop.Side = asrBottom
|
||||
AnchorSideRight.Control = gbLabelFont
|
||||
AnchorSideRight.Side = asrBottom
|
||||
Left = 0
|
||||
Height = 193
|
||||
Top = 178
|
||||
Width = 272
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
BorderSpacing.Top = 16
|
||||
Caption = 'gbShapeBrushPenMargins'
|
||||
TabOrder = 1
|
||||
end
|
||||
object gbLinkPen: TGroupBox
|
||||
AnchorSideLeft.Control = gbShapeBrushPenMargins
|
||||
AnchorSideLeft.Side = asrBottom
|
||||
AnchorSideTop.Control = Panel1
|
||||
AnchorSideRight.Control = gbArrow
|
||||
AnchorSideRight.Side = asrBottom
|
||||
Left = 296
|
||||
Height = 105
|
||||
Top = 0
|
||||
Width = 207
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
BorderSpacing.Left = 24
|
||||
Caption = 'gbLinkPen'
|
||||
TabOrder = 2
|
||||
end
|
||||
object gbArrow: TGroupBox
|
||||
AnchorSideLeft.Control = gbShapeBrushPenMargins
|
||||
AnchorSideLeft.Side = asrBottom
|
||||
AnchorSideTop.Control = gbLinkPen
|
||||
AnchorSideTop.Side = asrBottom
|
||||
AnchorSideRight.Control = Panel1
|
||||
AnchorSideRight.Side = asrBottom
|
||||
Left = 296
|
||||
Height = 138
|
||||
Top = 121
|
||||
Width = 207
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
BorderSpacing.Left = 24
|
||||
BorderSpacing.Top = 16
|
||||
Caption = 'gbArrow'
|
||||
TabOrder = 3
|
||||
end
|
||||
object gbLabelFont: TGroupBox
|
||||
AnchorSideLeft.Control = Panel1
|
||||
AnchorSideTop.Control = Panel1
|
||||
Left = 0
|
||||
Height = 162
|
||||
Top = 0
|
||||
Width = 272
|
||||
Caption = 'gbLabelFont'
|
||||
TabOrder = 0
|
||||
end
|
||||
object gbPosition: TGroupBox
|
||||
AnchorSideLeft.Control = gbShapeBrushPenMargins
|
||||
AnchorSideLeft.Side = asrBottom
|
||||
AnchorSideTop.Control = gbArrow
|
||||
AnchorSideTop.Side = asrBottom
|
||||
AnchorSideRight.Control = gbArrow
|
||||
AnchorSideRight.Side = asrBottom
|
||||
Left = 296
|
||||
Height = 113
|
||||
Top = 275
|
||||
Width = 207
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
AutoSize = True
|
||||
BorderSpacing.Left = 24
|
||||
BorderSpacing.Top = 16
|
||||
Caption = 'Position'
|
||||
ClientHeight = 93
|
||||
ClientWidth = 203
|
||||
TabOrder = 4
|
||||
object lblDistance: TLabel
|
||||
AnchorSideLeft.Control = gbPosition
|
||||
AnchorSideTop.Control = seDistance
|
||||
AnchorSideTop.Side = asrCenter
|
||||
Left = 16
|
||||
Height = 15
|
||||
Top = 8
|
||||
Width = 45
|
||||
BorderSpacing.Left = 16
|
||||
Caption = 'Distance'
|
||||
end
|
||||
object seDistance: TSpinEdit
|
||||
AnchorSideLeft.Control = lblDistance
|
||||
AnchorSideLeft.Side = asrBottom
|
||||
AnchorSideTop.Control = gbPosition
|
||||
AnchorSideRight.Control = gbPosition
|
||||
AnchorSideRight.Side = asrBottom
|
||||
Left = 85
|
||||
Height = 23
|
||||
Top = 4
|
||||
Width = 110
|
||||
Alignment = taRightJustify
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
BorderSpacing.Left = 24
|
||||
BorderSpacing.Top = 4
|
||||
BorderSpacing.Right = 8
|
||||
BorderSpacing.Bottom = 8
|
||||
MaxValue = 1000
|
||||
OnChange = seDistanceChange
|
||||
TabOrder = 0
|
||||
end
|
||||
object lblPosition: TLabel
|
||||
AnchorSideLeft.Control = lblDistance
|
||||
AnchorSideTop.Control = cmbMarkPositions
|
||||
AnchorSideTop.Side = asrCenter
|
||||
Left = 16
|
||||
Height = 15
|
||||
Top = 39
|
||||
Width = 43
|
||||
Caption = 'Position'
|
||||
end
|
||||
object cmbMarkPositions: TComboBox
|
||||
AnchorSideLeft.Control = seDistance
|
||||
AnchorSideTop.Control = seDistance
|
||||
AnchorSideTop.Side = asrBottom
|
||||
AnchorSideRight.Control = seDistance
|
||||
AnchorSideRight.Side = asrBottom
|
||||
Left = 85
|
||||
Height = 23
|
||||
Top = 35
|
||||
Width = 110
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
BorderSpacing.Top = 6
|
||||
BorderSpacing.Bottom = 8
|
||||
ItemHeight = 15
|
||||
Items.Strings = (
|
||||
'Outside'
|
||||
'Positive'
|
||||
'Negative'
|
||||
'Inside'
|
||||
)
|
||||
OnChange = cmbMarkPositionsChange
|
||||
TabOrder = 1
|
||||
Text = 'cmbMarkPositions'
|
||||
end
|
||||
object cbMarksCentered: TCheckBox
|
||||
AnchorSideLeft.Control = lblPosition
|
||||
AnchorSideTop.Control = cmbMarkPositions
|
||||
AnchorSideTop.Side = asrBottom
|
||||
Left = 16
|
||||
Height = 19
|
||||
Top = 66
|
||||
Width = 112
|
||||
BorderSpacing.Top = 6
|
||||
BorderSpacing.Bottom = 8
|
||||
Caption = 'Position centered'
|
||||
OnChange = cbMarksCenteredChange
|
||||
TabOrder = 2
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
188
components/tachart/demo/charteditor/cemarksform.pas
Normal file
188
components/tachart/demo/charteditor/cemarksform.pas
Normal file
@ -0,0 +1,188 @@
|
||||
unit ceMarksForm;
|
||||
|
||||
{$mode ObjFPC}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ButtonPanel, StdCtrls,
|
||||
ExtCtrls, Spin,
|
||||
TAGraph, TATextElements, TACustomSeries,
|
||||
ceFontFrame, ceShapeBrushPenMarginsFrame, ceSimplePenFrame, ceArrowFrame;
|
||||
|
||||
type
|
||||
|
||||
{ TMarksForm }
|
||||
|
||||
TMarksForm = class(TForm)
|
||||
ButtonPanel: TButtonPanel;
|
||||
cbMarksCentered: TCheckBox;
|
||||
cmbMarkPositions: TComboBox;
|
||||
gbArrow: TGroupBox;
|
||||
gbShapeBrushPenMargins: TGroupBox;
|
||||
gbLinkPen: TGroupBox;
|
||||
gbLabelFont: TGroupBox;
|
||||
gbPosition: TGroupBox;
|
||||
lblPosition: TLabel;
|
||||
lblDistance: TLabel;
|
||||
Panel1: TPanel;
|
||||
seDistance: TSpinEdit;
|
||||
procedure cbMarksCenteredChange(Sender: TObject);
|
||||
procedure cmbMarkPositionsChange(Sender: TObject);
|
||||
procedure FormCreate(Sender: TObject);
|
||||
procedure seDistanceChange(Sender: TObject);
|
||||
private
|
||||
FSeries: TChartSeries;
|
||||
FShapeBrushPenMarginsFrame: TChartShapeBrushPenMarginsFrame;
|
||||
FLinkPenFrame: TSimpleChartPenFrame;
|
||||
FFontFrame: TChartFontFrame;
|
||||
FArrowFrame: TChartArrowFrame;
|
||||
function GetChart: TChart;
|
||||
procedure ShapeChangedHandler(AShape: TChartLabelShape);
|
||||
|
||||
public
|
||||
procedure Prepare(ASeries: TChartSeries);
|
||||
|
||||
end;
|
||||
|
||||
var
|
||||
MarksForm: TMarksForm;
|
||||
|
||||
implementation
|
||||
|
||||
{$R *.lfm}
|
||||
|
||||
uses
|
||||
TASeries,
|
||||
ceUtils;
|
||||
|
||||
|
||||
{ TMarksForm }
|
||||
|
||||
procedure TMarksForm.cbMarksCenteredChange(Sender: TObject);
|
||||
begin
|
||||
if (FSeries is TBarSeries) then
|
||||
TBarSeries(FSeries).MarkPositionCentered := cbMarksCentered.Checked;
|
||||
end;
|
||||
|
||||
procedure TMarksForm.cmbMarkPositionsChange(Sender: TObject);
|
||||
begin
|
||||
if (FSeries is TLineSeries) then
|
||||
TLineSeries(FSeries).MarkPositions := TLinearMarkPositions(cmbMarkPositions.ItemIndex)
|
||||
else if (FSeries is TAreaSeries) then
|
||||
TAreaSeries(FSeries).MarkPositions := TLinearMarkPositions(cmbMarkPositions.ItemIndex)
|
||||
else if (FSeries is TBarSeries) then
|
||||
TBarSeries(FSeries).MarkPositions := TLinearMarkPositions(cmbMarkPositions.ItemIndex)
|
||||
else
|
||||
raise Exception.Create('Series type not supported.');
|
||||
end;
|
||||
|
||||
procedure TMarksForm.FormCreate(Sender: TObject);
|
||||
begin
|
||||
FFontFrame := TChartFontFrame.Create(self);
|
||||
FFontFrame.Name := '';
|
||||
FFontFrame.Align := alClient;
|
||||
FFontFrame.BorderSpacing.Left := 16;
|
||||
FFontFrame.BorderSpacing.Right := 8;
|
||||
FFontFrame.BorderSpacing.Bottom := 8;
|
||||
FFontFrame.AutoSize := true;
|
||||
FFontFrame.Parent := gbLabelFont;
|
||||
gbLabelFont.AutoSize := true;
|
||||
gbLabelFont.Caption := 'Marks font';
|
||||
|
||||
FShapeBrushPenMarginsFrame := TChartShapeBrushPenMarginsFrame.Create(self);
|
||||
FShapeBrushPenMarginsFrame.Name := '';
|
||||
FShapeBrushPenMarginsFrame.Align := alClient;
|
||||
FShapeBrushPenMarginsFrame.BorderSpacing.Left := 16;
|
||||
FShapeBrushPenMarginsFrame.BorderSpacing.Right := 8;
|
||||
FShapeBrushPenMarginsFrame.BorderSpacing.Bottom := 8;
|
||||
// FShapeBrushPenMarginsFrame.OnChange := @ChangedHandler;
|
||||
FShapeBrushPenMarginsFrame.OnShapeChange := @ShapeChangedHandler;
|
||||
FShapeBrushPenMarginsFrame.AutoSize := true;
|
||||
FShapeBrushPenMarginsFrame.Parent := gbShapeBrushPenMargins;
|
||||
gbShapeBrushPenMargins.AutoSize := true;
|
||||
gbShapeBrushPenMargins.Caption := 'Marks shape and background';
|
||||
|
||||
FLinkPenFrame := TSimpleChartPenFrame.Create(self);
|
||||
FLinkPenFrame.Name := '';
|
||||
FLinkPenFrame.Align := alClient;
|
||||
FLinkPenFrame.BorderSpacing.Left := 16;
|
||||
FLinkPenFrame.BorderSpacing.Right := 8;
|
||||
FLinkPenFrame.BorderSpacing.Bottom := 8;
|
||||
FLinkPenFrame.AutoSize := true;
|
||||
FLinkPenFrame.Parent := gbLinkPen;
|
||||
gbLinkPen.AutoSize := true;
|
||||
gbLinkPen.Caption := 'Link line';
|
||||
|
||||
FArrowFrame := TChartArrowFrame.Create(self);
|
||||
FArrowFrame.Name := '';
|
||||
FArrowFrame.Align := alClient;
|
||||
FArrowFrame.BorderSpacing.Left := 16;
|
||||
FArrowFrame.BorderSpacing.Right := 8;
|
||||
FArrowFrame.BorderSpacing.Bottom := 8;
|
||||
FArrowFrame.AutoSize := true;
|
||||
FArrowFrame.Parent := gbArrow;
|
||||
gbArrow.AutoSize := true;
|
||||
gbArrow.Caption := 'Arrow';
|
||||
|
||||
AutoSize := true;
|
||||
|
||||
BoldHeaders(self);
|
||||
end;
|
||||
|
||||
function TMarksForm.GetChart: TChart;
|
||||
begin
|
||||
Result := FSeries.ParentChart;
|
||||
end;
|
||||
|
||||
procedure TMarksForm.Prepare(ASeries: TChartSeries);
|
||||
begin
|
||||
FSeries := ASeries;
|
||||
|
||||
with ASeries.Marks do
|
||||
begin
|
||||
FFontFrame.Prepare(LabelFont, true);
|
||||
FShapeBrushPenMarginsFrame.Prepare(Shape, LabelBrush, Frame, Margins);
|
||||
FLinkPenFrame.Prepare(LinkPen);
|
||||
FArrowFrame.Prepare(Arrow);
|
||||
end;
|
||||
|
||||
seDistance.Value := ASeries.Marks.Distance;
|
||||
if ASeries is TLineSeries then
|
||||
begin
|
||||
cmbMarkPositions.ItemIndex := ord(TLineSeries(ASeries).MarkPositions);
|
||||
cbMarksCentered.Hide;
|
||||
end else
|
||||
if ASeries is TBarSeries then
|
||||
begin
|
||||
cmbMarkPositions.ItemIndex := ord(TBarSeries(ASeries).MarkPositions);
|
||||
cbMarksCentered.Checked := TBarSeries(ASeries).MarkPositionCentered;
|
||||
end else
|
||||
if ASeries is TAreaSeries then
|
||||
begin
|
||||
cmbMarkPositions.ItemIndex := ord(TAreaSeries(ASeries).MarkPositions);
|
||||
cbMarksCentered.Hide;
|
||||
end else
|
||||
begin
|
||||
cmbMarkPositions.Hide;
|
||||
lblPosition.Hide;
|
||||
cbMarksCentered.Hide;
|
||||
end;
|
||||
|
||||
FLinkPenFrame.WidthLeft := FArrowFrame.seArrowBaseLength.Left;
|
||||
seDistance.BorderSpacing.Left := FArrowFrame.Left +
|
||||
FArrowFrame.seArrowBaseLength.Left - lblDistance.Width;
|
||||
end;
|
||||
|
||||
procedure TMarksForm.seDistanceChange(Sender: TObject);
|
||||
begin
|
||||
FSeries.Marks.Distance := seDistance.Value;
|
||||
end;
|
||||
|
||||
procedure TMarksForm.ShapeChangedHandler(AShape: TChartLabelShape);
|
||||
begin
|
||||
FSeries.Marks.Shape := AShape;
|
||||
end;
|
||||
|
||||
end.
|
||||
|
@ -1,11 +1,11 @@
|
||||
object PenFrame: TChartPenFrame
|
||||
object ChartPenFrame: TChartPenFrame
|
||||
Left = 0
|
||||
Height = 56
|
||||
Top = 0
|
||||
Width = 212
|
||||
Width = 214
|
||||
AutoSize = True
|
||||
ClientHeight = 56
|
||||
ClientWidth = 212
|
||||
ClientWidth = 214
|
||||
TabOrder = 0
|
||||
DesignLeft = 332
|
||||
DesignTop = 128
|
||||
@ -17,7 +17,7 @@ object PenFrame: TChartPenFrame
|
||||
Left = 48
|
||||
Height = 22
|
||||
Top = 0
|
||||
Width = 128
|
||||
Width = 130
|
||||
PenPattern = '1|1'
|
||||
PointerStyle = psNone
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
@ -36,7 +36,6 @@ object PenFrame: TChartPenFrame
|
||||
Top = 4
|
||||
Width = 25
|
||||
Caption = 'Style'
|
||||
ParentColor = False
|
||||
end
|
||||
object cbPenWidth: TChartComboBox
|
||||
AnchorSideLeft.Control = lblPenWidth
|
||||
@ -47,7 +46,7 @@ object PenFrame: TChartPenFrame
|
||||
Left = 48
|
||||
Height = 22
|
||||
Top = 30
|
||||
Width = 128
|
||||
Width = 130
|
||||
Mode = ccmPenWidth
|
||||
PenPattern = '1|1'
|
||||
PointerStyle = psNone
|
||||
@ -67,7 +66,6 @@ object PenFrame: TChartPenFrame
|
||||
Top = 34
|
||||
Width = 32
|
||||
Caption = 'Width'
|
||||
ParentColor = False
|
||||
end
|
||||
object cbPenColor: TColorButton
|
||||
AnchorSideLeft.Side = asrBottom
|
||||
@ -75,7 +73,7 @@ object PenFrame: TChartPenFrame
|
||||
AnchorSideTop.Side = asrCenter
|
||||
AnchorSideRight.Control = Owner
|
||||
AnchorSideRight.Side = asrBottom
|
||||
Left = 181
|
||||
Left = 183
|
||||
Height = 25
|
||||
Top = 14
|
||||
Width = 31
|
||||
@ -91,7 +89,7 @@ object PenFrame: TChartPenFrame
|
||||
AnchorSideRight.Control = cbPenColor
|
||||
AnchorSideBottom.Control = cbPenWidth
|
||||
AnchorSideBottom.Side = asrBottom
|
||||
Left = 176
|
||||
Left = 178
|
||||
Height = 52
|
||||
Top = 0
|
||||
Width = 5
|
||||
|
@ -26,12 +26,10 @@ type
|
||||
FPen: TPen;
|
||||
FOnChange: TNotifyEvent;
|
||||
procedure DoChanged;
|
||||
|
||||
public
|
||||
constructor Create(AOwner: TComponent); override;
|
||||
procedure Prepare(APen: TPen);
|
||||
property OnChange: TNotifyEvent read FOnChange write FOnChange;
|
||||
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
@ -32,7 +32,6 @@ type
|
||||
procedure DoChange;
|
||||
protected
|
||||
function GetChart: TChart;
|
||||
|
||||
public
|
||||
constructor Create(AOwner: TComponent); override;
|
||||
procedure Prepare(APointer: TSeriesPointer);
|
||||
|
@ -10,14 +10,14 @@ object ChartSeriesFrame: TChartSeriesFrame
|
||||
DesignTop = 344
|
||||
object PanelTop: TPanel
|
||||
Left = 0
|
||||
Height = 134
|
||||
Height = 142
|
||||
Top = 0
|
||||
Width = 589
|
||||
Align = alTop
|
||||
AutoSize = True
|
||||
BorderSpacing.Bottom = 12
|
||||
BevelOuter = bvNone
|
||||
ClientHeight = 134
|
||||
ClientHeight = 142
|
||||
ClientWidth = 589
|
||||
TabOrder = 0
|
||||
object cbShowSeries: TCheckBox
|
||||
@ -37,14 +37,16 @@ object ChartSeriesFrame: TChartSeriesFrame
|
||||
AnchorSideTop.Control = cbShowSeries
|
||||
AnchorSideTop.Side = asrBottom
|
||||
AnchorSideRight.Control = Bevel4
|
||||
AnchorSideBottom.Control = gbMarks
|
||||
AnchorSideBottom.Side = asrBottom
|
||||
Left = 0
|
||||
Height = 109
|
||||
Height = 117
|
||||
Top = 25
|
||||
Width = 286
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
Anchors = [akTop, akLeft, akRight, akBottom]
|
||||
AutoSize = True
|
||||
Caption = 'Legend text'
|
||||
ClientHeight = 89
|
||||
Caption = 'Legend text (Series title)'
|
||||
ClientHeight = 97
|
||||
ClientWidth = 282
|
||||
TabOrder = 1
|
||||
object edSeriesTitle: TEdit
|
||||
@ -71,14 +73,14 @@ object ChartSeriesFrame: TChartSeriesFrame
|
||||
Left = 8
|
||||
Height = 19
|
||||
Top = 33
|
||||
Width = 101
|
||||
Width = 133
|
||||
BorderSpacing.Top = 6
|
||||
Caption = 'Show in legend'
|
||||
Caption = 'Show series in legend'
|
||||
OnChange = cbShowInLegendChange
|
||||
TabOrder = 1
|
||||
end
|
||||
object cbLegendMultiplicity: TComboBox
|
||||
AnchorSideLeft.Control = Label1
|
||||
object cmbLegendMultiplicity: TComboBox
|
||||
AnchorSideLeft.Control = lblLegendItems
|
||||
AnchorSideLeft.Side = asrBottom
|
||||
AnchorSideTop.Control = cbShowInLegend
|
||||
AnchorSideTop.Side = asrBottom
|
||||
@ -95,42 +97,42 @@ object ChartSeriesFrame: TChartSeriesFrame
|
||||
ItemHeight = 15
|
||||
ItemIndex = 0
|
||||
Items.Strings = (
|
||||
'single item per series'
|
||||
'marks text per data point'
|
||||
'Series title'
|
||||
'Marks text per data point'
|
||||
)
|
||||
OnChange = cbLegendMultiplicityChange
|
||||
OnChange = cmbLegendMultiplicityChange
|
||||
Style = csDropDownList
|
||||
TabOrder = 2
|
||||
Text = 'single item per series'
|
||||
Text = 'Series title'
|
||||
end
|
||||
object Label1: TLabel
|
||||
object lblLegendItems: TLabel
|
||||
AnchorSideLeft.Control = edSeriesTitle
|
||||
AnchorSideTop.Control = cbLegendMultiplicity
|
||||
AnchorSideTop.Control = cmbLegendMultiplicity
|
||||
AnchorSideTop.Side = asrCenter
|
||||
Left = 8
|
||||
Height = 15
|
||||
Top = 62
|
||||
Width = 71
|
||||
Caption = 'Legend items'
|
||||
ParentColor = False
|
||||
end
|
||||
end
|
||||
object gbMarks: TGroupBox
|
||||
AnchorSideLeft.Control = Bevel4
|
||||
AnchorSideLeft.Side = asrBottom
|
||||
AnchorSideTop.Control = gbLegendText
|
||||
AnchorSideTop.Control = cbShowSeries
|
||||
AnchorSideTop.Side = asrBottom
|
||||
AnchorSideRight.Control = PanelTop
|
||||
AnchorSideRight.Side = asrBottom
|
||||
AnchorSideBottom.Control = gbLegendText
|
||||
AnchorSideBottom.Side = asrBottom
|
||||
Left = 302
|
||||
Height = 109
|
||||
Height = 117
|
||||
Top = 25
|
||||
Width = 287
|
||||
Anchors = [akTop, akLeft, akRight, akBottom]
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
AutoSize = True
|
||||
Caption = 'Marks'
|
||||
ClientHeight = 89
|
||||
ClientHeight = 97
|
||||
ClientWidth = 283
|
||||
TabOrder = 2
|
||||
object lblSeriesMarksStyle: TLabel
|
||||
@ -143,7 +145,6 @@ object ChartSeriesFrame: TChartSeriesFrame
|
||||
Width = 25
|
||||
BorderSpacing.Left = 8
|
||||
Caption = 'Style'
|
||||
ParentColor = False
|
||||
end
|
||||
object cbMarksStyle: TComboBox
|
||||
AnchorSideLeft.Control = edMarksFormat
|
||||
@ -186,7 +187,6 @@ object ChartSeriesFrame: TChartSeriesFrame
|
||||
Top = 37
|
||||
Width = 38
|
||||
Caption = 'Format'
|
||||
ParentColor = False
|
||||
end
|
||||
object edMarksFormat: TEdit
|
||||
AnchorSideLeft.Control = Label2
|
||||
@ -208,18 +208,35 @@ object ChartSeriesFrame: TChartSeriesFrame
|
||||
Text = 'edMarksFormat'
|
||||
end
|
||||
object cbShowMarks: TCheckBox
|
||||
AnchorSideLeft.Control = edMarksFormat
|
||||
AnchorSideTop.Control = edMarksFormat
|
||||
AnchorSideTop.Side = asrBottom
|
||||
Left = 54
|
||||
AnchorSideLeft.Control = lblSeriesMarksStyle
|
||||
AnchorSideTop.Control = btnMore
|
||||
AnchorSideTop.Side = asrCenter
|
||||
Left = 8
|
||||
Height = 19
|
||||
Top = 62
|
||||
Top = 67
|
||||
Width = 156
|
||||
BorderSpacing.Top = 6
|
||||
Caption = 'Show at series data points'
|
||||
OnChange = cbShowMarksChange
|
||||
TabOrder = 2
|
||||
end
|
||||
object btnMore: TButton
|
||||
AnchorSideTop.Control = edMarksFormat
|
||||
AnchorSideTop.Side = asrBottom
|
||||
AnchorSideRight.Control = gbMarks
|
||||
AnchorSideRight.Side = asrBottom
|
||||
Left = 212
|
||||
Height = 25
|
||||
Top = 64
|
||||
Width = 63
|
||||
Anchors = [akTop, akRight]
|
||||
AutoSize = True
|
||||
BorderSpacing.Around = 8
|
||||
Caption = 'More...'
|
||||
Enabled = False
|
||||
OnClick = btnMoreClick
|
||||
TabOrder = 3
|
||||
end
|
||||
end
|
||||
object Bevel4: TBevel
|
||||
AnchorSideLeft.Control = PanelTop
|
||||
@ -233,8 +250,8 @@ object ChartSeriesFrame: TChartSeriesFrame
|
||||
end
|
||||
object nbSeriesTypes: TNotebook
|
||||
Left = 0
|
||||
Height = 313
|
||||
Top = 146
|
||||
Height = 305
|
||||
Top = 154
|
||||
Width = 589
|
||||
PageIndex = 0
|
||||
Align = alClient
|
||||
@ -273,12 +290,12 @@ object ChartSeriesFrame: TChartSeriesFrame
|
||||
AnchorSideRight.Control = pgLineSeries
|
||||
AnchorSideRight.Side = asrBottom
|
||||
Left = 302
|
||||
Height = 240
|
||||
Height = 88
|
||||
Top = 0
|
||||
Width = 287
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
Caption = 'gbLineSeriesPointer'
|
||||
ClientHeight = 220
|
||||
ClientHeight = 68
|
||||
ClientWidth = 283
|
||||
TabOrder = 1
|
||||
object cbLineSeriesShowPoints: TCheckBox
|
||||
|
@ -18,10 +18,11 @@ type
|
||||
Bevel2: TBevel;
|
||||
Bevel3: TBevel;
|
||||
Bevel4: TBevel;
|
||||
btnMore: TButton;
|
||||
cbAreaShowContourLines: TCheckBox;
|
||||
cbAreaShowDropLines: TCheckBox;
|
||||
cbBarShape: TComboBox;
|
||||
cbLegendMultiplicity: TComboBox;
|
||||
cmbLegendMultiplicity: TComboBox;
|
||||
cbLineSeriesShowLines: TCheckBox;
|
||||
cbLineSeriesShowPoints: TCheckBox;
|
||||
cbMarksStyle: TComboBox;
|
||||
@ -40,7 +41,7 @@ type
|
||||
gbLineSeriesLineStyle: TGroupBox;
|
||||
gbLineSeriesPointer: TGroupBox;
|
||||
gbMarks: TGroupBox;
|
||||
Label1: TLabel;
|
||||
lblLegendItems: TLabel;
|
||||
Label2: TLabel;
|
||||
lblSeriesMarksStyle: TLabel;
|
||||
nbSeriesTypes: TNotebook;
|
||||
@ -48,10 +49,11 @@ type
|
||||
pgAreaSeries: TPage;
|
||||
pgBarSeries: TPage;
|
||||
pgLineSeries: TPage;
|
||||
procedure btnMoreClick(Sender: TObject);
|
||||
procedure cbAreaShowContourLinesChange(Sender: TObject);
|
||||
procedure cbAreaShowDropLinesChange(Sender: TObject);
|
||||
procedure cbBarShapeChange(Sender: TObject);
|
||||
procedure cbLegendMultiplicityChange(Sender: TObject);
|
||||
procedure cmbLegendMultiplicityChange(Sender: TObject);
|
||||
procedure cbLineSeriesShowLinesChange(Sender: TObject);
|
||||
procedure cbLineSeriesShowPointsChange(Sender: TObject);
|
||||
procedure cbMarksStyleChange(Sender: TObject);
|
||||
@ -85,8 +87,8 @@ implementation
|
||||
{$R *.lfm}
|
||||
|
||||
uses
|
||||
ceUtils,
|
||||
TAChartUtils, TALegend;
|
||||
TAChartUtils, TALegend,
|
||||
ceUtils, ceMarksForm;
|
||||
|
||||
constructor TChartSeriesFrame.Create(AOwner: TComponent);
|
||||
begin
|
||||
@ -176,7 +178,7 @@ begin
|
||||
{ for all }
|
||||
BoldHeaders(self);
|
||||
|
||||
cbLegendMultiplicity.DropdownCount := DEFAULT_DROPDOWN_COUNT;
|
||||
cmbLegendMultiplicity.DropdownCount := DEFAULT_DROPDOWN_COUNT;
|
||||
cbMarksStyle.DropdownCount := DEFAULT_DROPDOWN_COUNT;
|
||||
end;
|
||||
|
||||
@ -187,6 +189,30 @@ begin
|
||||
TAreaSeries(FSeries).AreaContourPen.Style := FAreaSeriesContourPenFrame.cbPenStyle.PenStyle
|
||||
else
|
||||
TAreaSeries(FSeries).AreaContourPen.Style := psClear;
|
||||
FAreaSeriesContourPenFrame.Enabled := cbAreaShowContourLines.Checked;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TChartSeriesFrame.btnMoreClick(Sender: TObject);
|
||||
var
|
||||
F: TMarksForm;
|
||||
ser: TBasicChartSeries;
|
||||
begin
|
||||
if not (FSeries is TChartSeries) then
|
||||
exit;
|
||||
|
||||
F := TMarksForm.Create(GetParentForm(self));
|
||||
try
|
||||
ser := TSeriesClass(FSeries.ClassType).Create(nil);
|
||||
ser.Assign(FSeries);
|
||||
|
||||
F.Prepare(TChartSeries(FSeries));
|
||||
F.Position := poOwnerFormCenter;
|
||||
if F.ShowModal <> mrOK then
|
||||
FSeries.Assign(ser);
|
||||
finally
|
||||
ser.Free;
|
||||
F.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -197,6 +223,7 @@ begin
|
||||
TAreaSeries(FSeries).AreaLinesPen.Style := FAreaSeriesDropLinesPenFrame.cbPenStyle.PenStyle
|
||||
else
|
||||
TAreaSeries(FSeries).AreaLinesPen.Style := psClear;
|
||||
FAreaSeriesDropLinesPenFrame.Enabled := cbAreaShowDropLines.Checked;
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -206,21 +233,25 @@ begin
|
||||
TBarSeries(FSeries).BarShape := TBarShape(cbBarShape.ItemIndex);
|
||||
end;
|
||||
|
||||
procedure TChartSeriesFrame.cbLegendMultiplicityChange(Sender: TObject);
|
||||
procedure TChartSeriesFrame.cmbLegendMultiplicityChange(Sender: TObject);
|
||||
begin
|
||||
(FSeries as TCustomChartSeries).Legend.Multiplicity := TLegendMultiplicity(cbLegendMultiplicity.ItemIndex);
|
||||
(FSeries as TCustomChartSeries).Legend.Multiplicity := TLegendMultiplicity(cmbLegendMultiplicity.ItemIndex);
|
||||
end;
|
||||
|
||||
procedure TChartSeriesFrame.cbLineSeriesShowLinesChange(Sender: TObject);
|
||||
begin
|
||||
if FSeries is TLineSeries then
|
||||
begin
|
||||
TLineSeries(FSeries).ShowLines := cbLineSeriesShowLines.Checked;
|
||||
FLineSeriesPenFrame.Enabled := cbLineSeriesShowLines.Checked;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TChartSeriesFrame.cbLineSeriesShowPointsChange(Sender: TObject);
|
||||
begin
|
||||
if FSeries is TLineSeries then
|
||||
TLineSeries(FSeries).ShowPoints := cbLineSeriesShowPoints.Checked;
|
||||
FLineSeriesPointerFrame.Enabled := cbLineSeriesShowPoints.Checked;
|
||||
end;
|
||||
|
||||
procedure TChartSeriesFrame.cbMarksStyleChange(Sender: TObject);
|
||||
@ -231,23 +262,32 @@ begin
|
||||
series := TChartSeries(FSeries);
|
||||
series.Marks.Style := TSeriesMarksStyle(cbMarksStyle.ItemIndex);
|
||||
edMarksFormat.Text := series.Marks.Format;
|
||||
btnMore.Enabled := (series.Marks.Style <> smsNone) and cbShowMarks.Checked;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TChartSeriesFrame.cbShowInLegendChange(Sender: TObject);
|
||||
begin
|
||||
(FSeries as TCustomChartSeries).Legend.Visible := cbShowInLegend.Checked;
|
||||
lblLegendItems.Enabled := cbShowInLegend.Checked;
|
||||
cmbLegendMultiplicity.Enabled := cbShowInLegend.Checked;
|
||||
end;
|
||||
|
||||
procedure TChartSeriesFrame.cbShowMarksChange(Sender: TObject);
|
||||
begin
|
||||
if (FSeries is TChartSeries) then
|
||||
begin
|
||||
TChartSeries(FSeries).Marks.Visible := cbShowMarks.Checked;
|
||||
btnMore.Enabled := (TChartSeries(FSeries).Marks.Style <> smsNone) and cbShowMarks.Checked;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TChartSeriesFrame.cbShowSeriesChange(Sender: TObject);
|
||||
begin
|
||||
FSeries.Active := cbShowSeries.Checked;
|
||||
gbLegendText.Visible := cbShowSeries.Checked;
|
||||
gbMarks.Visible := cbShowSeries.Checked;
|
||||
nbSeriesTypes.Visible := cbShowSeries.Checked;
|
||||
end;
|
||||
|
||||
procedure TChartSeriesFrame.ChangedHandler(Sender: TObject);
|
||||
@ -285,7 +325,7 @@ begin
|
||||
cbShowSeries.Checked := series.Active;
|
||||
cbShowInLegend.Checked := series.Legend.Visible;
|
||||
edSeriesTitle.Text := series.Title;
|
||||
cbLegendMultiplicity.ItemIndex := ord(series.Legend.Multiplicity);
|
||||
cmbLegendMultiplicity.ItemIndex := ord(series.Legend.Multiplicity);
|
||||
|
||||
gbMarks.Visible := (FSeries is TChartSeries);
|
||||
if (FSeries is TChartSeries) then begin
|
||||
@ -317,6 +357,7 @@ begin
|
||||
FAreaSeriesContourPenFrame.Prepare(TAreaSeries(ASeries).AreaContourPen);
|
||||
FAreaSeriesDropLinesPenFrame.Prepare(TAreaSeries(ASeries).AreaLinesPen);
|
||||
end;
|
||||
|
||||
end;
|
||||
|
||||
end.
|
||||
|
@ -2,9 +2,9 @@ object ChartShapeBrushPenMarginsFrame: TChartShapeBrushPenMarginsFrame
|
||||
Left = 0
|
||||
Height = 237
|
||||
Top = 0
|
||||
Width = 227
|
||||
Width = 276
|
||||
ClientHeight = 237
|
||||
ClientWidth = 227
|
||||
ClientWidth = 276
|
||||
TabOrder = 0
|
||||
DesignLeft = 1498
|
||||
DesignTop = 388
|
||||
@ -17,7 +17,7 @@ object ChartShapeBrushPenMarginsFrame: TChartShapeBrushPenMarginsFrame
|
||||
Left = 0
|
||||
Height = 23
|
||||
Top = 0
|
||||
Width = 227
|
||||
Width = 276
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
Enabled = False
|
||||
ItemHeight = 15
|
||||
@ -37,137 +37,62 @@ object ChartShapeBrushPenMarginsFrame: TChartShapeBrushPenMarginsFrame
|
||||
AnchorSideLeft.Control = Owner
|
||||
AnchorSideTop.Control = cmbShape
|
||||
AnchorSideTop.Side = asrBottom
|
||||
AnchorSideRight.Control = Spacer
|
||||
AnchorSideRight.Side = asrBottom
|
||||
AnchorSideBottom.Control = gbBorder
|
||||
AnchorSideBottom.Side = asrBottom
|
||||
Left = 0
|
||||
Height = 54
|
||||
Height = 73
|
||||
Top = 31
|
||||
Width = 106
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
Width = 83
|
||||
Anchors = [akTop, akLeft, akBottom]
|
||||
AutoSize = True
|
||||
BorderSpacing.Top = 8
|
||||
BorderSpacing.Right = 8
|
||||
Caption = 'Background'
|
||||
ClientHeight = 34
|
||||
ClientWidth = 102
|
||||
TabOrder = 1
|
||||
object cbFilled: TCheckBox
|
||||
AnchorSideLeft.Control = gbBackground
|
||||
AnchorSideTop.Control = cbFillColor
|
||||
AnchorSideTop.Side = asrCenter
|
||||
AnchorSideRight.Control = cbFillColor
|
||||
Left = 10
|
||||
Height = 19
|
||||
Top = 3
|
||||
Width = 44
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
BorderSpacing.Left = 10
|
||||
BorderSpacing.Top = 6
|
||||
BorderSpacing.Right = 8
|
||||
BorderSpacing.Bottom = 12
|
||||
Caption = 'Filled'
|
||||
OnChange = cbFilledChange
|
||||
TabOrder = 0
|
||||
end
|
||||
object cbFillColor: TColorButton
|
||||
AnchorSideTop.Control = gbBackground
|
||||
AnchorSideRight.Control = gbBackground
|
||||
AnchorSideRight.Side = asrBottom
|
||||
Left = 62
|
||||
Height = 25
|
||||
Top = 0
|
||||
Width = 32
|
||||
Anchors = [akTop, akRight]
|
||||
BorderSpacing.Left = 8
|
||||
BorderSpacing.Right = 8
|
||||
BorderSpacing.Bottom = 8
|
||||
BorderWidth = 2
|
||||
ButtonColorSize = 16
|
||||
ButtonColor = clBlack
|
||||
Margin = 2
|
||||
Visible = False
|
||||
OnColorChanged = cbFillColorColorChanged
|
||||
end
|
||||
end
|
||||
object gbBorder: TGroupBox
|
||||
AnchorSideLeft.Control = Spacer
|
||||
AnchorSideTop.Control = gbBackground
|
||||
AnchorSideLeft.Control = gbBackground
|
||||
AnchorSideLeft.Side = asrBottom
|
||||
AnchorSideTop.Control = cmbShape
|
||||
AnchorSideTop.Side = asrBottom
|
||||
AnchorSideRight.Control = Owner
|
||||
AnchorSideRight.Side = asrBottom
|
||||
AnchorSideBottom.Control = gbBackground
|
||||
AnchorSideBottom.Side = asrBottom
|
||||
Left = 121
|
||||
Height = 54
|
||||
Left = 91
|
||||
Height = 73
|
||||
Top = 31
|
||||
Width = 106
|
||||
Anchors = [akTop, akLeft, akRight, akBottom]
|
||||
AutoSize = True
|
||||
Width = 185
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
BorderSpacing.Left = 8
|
||||
BorderSpacing.Top = 8
|
||||
Caption = 'Border'
|
||||
ClientHeight = 34
|
||||
ClientWidth = 102
|
||||
TabOrder = 2
|
||||
object cbShowBorder: TCheckBox
|
||||
AnchorSideLeft.Control = gbBorder
|
||||
AnchorSideTop.Control = cbBorderColor
|
||||
AnchorSideTop.Side = asrCenter
|
||||
AnchorSideRight.Control = cbBorderColor
|
||||
Left = 10
|
||||
Height = 19
|
||||
Top = 3
|
||||
Width = 50
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
BorderSpacing.Left = 10
|
||||
BorderSpacing.Top = 6
|
||||
BorderSpacing.Bottom = 12
|
||||
Caption = 'Visible '
|
||||
OnChange = cbShowBorderChange
|
||||
TabOrder = 0
|
||||
end
|
||||
object cbBorderColor: TColorButton
|
||||
AnchorSideTop.Control = gbBorder
|
||||
AnchorSideRight.Control = gbBorder
|
||||
AnchorSideRight.Side = asrBottom
|
||||
Left = 64
|
||||
Height = 25
|
||||
Top = 0
|
||||
Width = 30
|
||||
Anchors = [akTop, akRight]
|
||||
BorderSpacing.Left = 4
|
||||
BorderSpacing.Right = 8
|
||||
BorderSpacing.Bottom = 8
|
||||
BorderWidth = 2
|
||||
ButtonColorSize = 16
|
||||
ButtonColor = clBlack
|
||||
Margin = 2
|
||||
Visible = False
|
||||
OnColorChanged = cbBorderColorColorChanged
|
||||
end
|
||||
end
|
||||
object gbMargins: TGroupBox
|
||||
AnchorSideLeft.Control = gbBackground
|
||||
AnchorSideTop.Control = gbBackground
|
||||
AnchorSideTop.Side = asrBottom
|
||||
AnchorSideRight.Control = gbBorder
|
||||
AnchorSideRight.Control = Owner
|
||||
AnchorSideRight.Side = asrBottom
|
||||
AnchorSideBottom.Side = asrBottom
|
||||
Left = 0
|
||||
Height = 97
|
||||
Top = 93
|
||||
Width = 227
|
||||
Top = 112
|
||||
Width = 276
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
AutoSize = True
|
||||
BorderSpacing.Top = 8
|
||||
Caption = 'Margins'
|
||||
ClientHeight = 77
|
||||
ClientWidth = 223
|
||||
ClientWidth = 272
|
||||
TabOrder = 3
|
||||
object seTopMargin: TSpinEdit
|
||||
AnchorSideLeft.Control = gbMargins
|
||||
AnchorSideLeft.Side = asrCenter
|
||||
AnchorSideTop.Control = gbMargins
|
||||
Left = 86
|
||||
Left = 111
|
||||
Height = 23
|
||||
Top = 0
|
||||
Width = 50
|
||||
@ -180,7 +105,7 @@ object ChartShapeBrushPenMarginsFrame: TChartShapeBrushPenMarginsFrame
|
||||
AnchorSideTop.Control = seTopMargin
|
||||
AnchorSideTop.Side = asrBottom
|
||||
AnchorSideRight.Control = seTopMargin
|
||||
Left = 28
|
||||
Left = 53
|
||||
Height = 23
|
||||
Top = 23
|
||||
Width = 50
|
||||
@ -197,7 +122,7 @@ object ChartShapeBrushPenMarginsFrame: TChartShapeBrushPenMarginsFrame
|
||||
AnchorSideLeft.Side = asrBottom
|
||||
AnchorSideTop.Control = seTopMargin
|
||||
AnchorSideTop.Side = asrBottom
|
||||
Left = 144
|
||||
Left = 169
|
||||
Height = 23
|
||||
Top = 23
|
||||
Width = 50
|
||||
@ -215,7 +140,7 @@ object ChartShapeBrushPenMarginsFrame: TChartShapeBrushPenMarginsFrame
|
||||
AnchorSideTop.Side = asrBottom
|
||||
AnchorSideBottom.Control = gbMargins
|
||||
AnchorSideBottom.Side = asrBottom
|
||||
Left = 86
|
||||
Left = 111
|
||||
Height = 23
|
||||
Top = 46
|
||||
Width = 50
|
||||
@ -226,15 +151,4 @@ object ChartShapeBrushPenMarginsFrame: TChartShapeBrushPenMarginsFrame
|
||||
TabOrder = 3
|
||||
end
|
||||
end
|
||||
object Spacer: TBevel
|
||||
AnchorSideLeft.Control = cmbShape
|
||||
AnchorSideLeft.Side = asrCenter
|
||||
AnchorSideTop.Control = cmbShape
|
||||
AnchorSideTop.Side = asrBottom
|
||||
Left = 113
|
||||
Height = 50
|
||||
Top = 23
|
||||
Width = 1
|
||||
Shape = bsSpacer
|
||||
end
|
||||
end
|
||||
|
@ -6,7 +6,8 @@ interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, Graphics, Forms, Controls, StdCtrls, Dialogs, Spin, ExtCtrls,
|
||||
TATypes, TATextElements;
|
||||
TATypes, TATextElements,
|
||||
ceSimplePenFrame, ceSimpleBrushFrame;
|
||||
|
||||
type
|
||||
|
||||
@ -15,11 +16,6 @@ type
|
||||
{ TChartShapeBrushPenMarginsFrame }
|
||||
|
||||
TChartShapeBrushPenMarginsFrame = class(TFrame)
|
||||
Spacer: TBevel;
|
||||
cbBorderColor: TColorButton;
|
||||
cbFillColor: TColorButton;
|
||||
cbFilled: TCheckBox;
|
||||
cbShowBorder: TCheckBox;
|
||||
cmbShape: TComboBox;
|
||||
gbBackground: TGroupBox;
|
||||
gbBorder: TGroupBox;
|
||||
@ -28,10 +24,6 @@ type
|
||||
seLeftMargin: TSpinEdit;
|
||||
seRightMargin: TSpinEdit;
|
||||
seTopMargin: TSpinEdit;
|
||||
procedure cbBorderColorColorChanged(Sender: TObject);
|
||||
procedure cbFillColorColorChanged(Sender: TObject);
|
||||
procedure cbFilledChange(Sender: TObject);
|
||||
procedure cbShowBorderChange(Sender: TObject);
|
||||
procedure cmbShapeChange(Sender: TObject);
|
||||
procedure seBottomMarginChange(Sender: TObject);
|
||||
procedure seLeftMarginChange(Sender: TObject);
|
||||
@ -45,9 +37,11 @@ type
|
||||
FMargins: TChartLabelMargins;
|
||||
FShape: TChartLabelShape;
|
||||
FLockEvents: Integer;
|
||||
procedure DoChanged;
|
||||
FBrushFrame: TSimpleChartBrushFrame;
|
||||
FPenFrame: TSimpleChartPenFrame;
|
||||
procedure ChangeHandler(Sender: TObject);
|
||||
procedure DoChange;
|
||||
procedure DoShapeChanged(AShape: TChartLabelShape);
|
||||
procedure UpdateControls;
|
||||
protected
|
||||
procedure CalculatePreferredSize(var PreferredWidth, PreferredHeight: integer;
|
||||
{%H-}WithThemeSpace: Boolean); override;
|
||||
@ -74,9 +68,30 @@ uses
|
||||
constructor TChartShapeBrushPenMarginsFrame.Create(AOwner: TComponent);
|
||||
begin
|
||||
inherited;
|
||||
cbFillColor.Width := cbFillColor.Height;
|
||||
cbBorderColor.Width := cbBorderColor.Height;
|
||||
|
||||
cmbShape.DropdownCount := DEFAULT_DROPDOWN_COUNT;
|
||||
|
||||
FBrushFrame := TSimpleChartBrushFrame.Create(self);
|
||||
FBrushFrame.Name := '';
|
||||
FBrushFrame.BorderSpacing.Left := 8;
|
||||
FBrushFrame.BorderSpacing.Right := 8;
|
||||
FBrushFrame.BorderSpacing.Bottom := 8;
|
||||
FBrushFrame.Align := alClient;
|
||||
FBrushFrame.OnChange := @ChangeHandler;
|
||||
FBrushFrame.AutoSize := true;
|
||||
gbBackground.AutoSize := true;
|
||||
FBrushFrame.Parent := gbBackground;
|
||||
|
||||
FPenFrame := TSimpleChartPenFrame.Create(self);
|
||||
FPenFrame.Name := '';
|
||||
FPenFrame.BorderSpacing.Left := 8;
|
||||
FPenFrame.BorderSpacing.Right := 8;
|
||||
FPenFrame.BorderSpacing.Bottom := 8;
|
||||
FPenFrame.Align := alClient;
|
||||
FPenFrame.OnChange := @ChangeHandler;
|
||||
FPenFrame.AutoSize := true;
|
||||
gbBorder.AutoSize := true;
|
||||
FPenFrame.Parent := gbBorder;
|
||||
end;
|
||||
|
||||
procedure TChartShapeBrushPenMarginsFrame.CalculatePreferredSize(
|
||||
@ -84,46 +99,26 @@ procedure TChartShapeBrushPenMarginsFrame.CalculatePreferredSize(
|
||||
WithThemeSpace: Boolean);
|
||||
begin
|
||||
PreferredHeight := cmbShape.Height +
|
||||
gbBackground.BorderSpacing.Top + gbBackground.Height +
|
||||
gbBorder.BorderSpacing.Top + gbBorder.Height +
|
||||
gbMargins.BorderSpacing.Top + gbMargins.Height;
|
||||
|
||||
PreferredWidth := Max(
|
||||
Max(gbBackground.Width, gbBorder.Width) * 2 + Spacer.Width,
|
||||
gbMargins.Width
|
||||
);;
|
||||
PreferredWidth :=
|
||||
gbBackground.Width + gbBorder.Width +
|
||||
Max(gbBackground.BorderSpacing.Right, gbBorder.BorderSpacing.Left);
|
||||
end;
|
||||
|
||||
procedure TChartShapeBrushPenMarginsFrame.cbBorderColorColorChanged(Sender: TObject);
|
||||
procedure TChartShapeBrushPenMarginsFrame.ChangeHandler(Sender: TObject);
|
||||
begin
|
||||
FPen.Color := cbBorderColor.ButtonColor;
|
||||
// if FPen.Style <> psClear then
|
||||
DoChanged;
|
||||
end;
|
||||
|
||||
procedure TChartShapeBrushPenMarginsFrame.cbFillColorColorChanged(Sender: TObject);
|
||||
var
|
||||
bs: TBrushStyle;
|
||||
begin
|
||||
bs := FBrush.Style;
|
||||
FBrush.Color := cbFillColor.ButtonColor;
|
||||
FBrush.Style := bs;
|
||||
// if FBrush.Style <> bsClear then
|
||||
DoChanged;
|
||||
end;
|
||||
|
||||
procedure TChartShapeBrushPenMarginsFrame.cbFilledChange(Sender: TObject);
|
||||
begin
|
||||
if cbFilled.Checked then FBrush.Style := bsSolid else FBrush.Style := bsClear;
|
||||
UpdateControls;
|
||||
DoChanged;
|
||||
end;
|
||||
|
||||
procedure TChartShapeBrushPenMarginsFrame.cbShowBorderChange(Sender: TObject);
|
||||
begin
|
||||
FPen.Visible := cbShowBorder.Checked;
|
||||
if FPen.Visible and (FPen.Style = psClear) then FPen.Style := psSolid;
|
||||
UpdateControls;
|
||||
DoChanged;
|
||||
if FLockEvents = 0 then
|
||||
begin
|
||||
if (Sender is TChartPen) then
|
||||
FPen := TChartPen(Sender)
|
||||
else if (Sender is TBrush) then
|
||||
FBrush := TBrush(Sender);
|
||||
cmbShape.Enabled := FPen.EffVisible or (FBrush.Style <> bsClear);
|
||||
gbMargins.Enabled := cmbShape.Enabled;
|
||||
DoChange;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TChartShapeBrushPenMarginsFrame.cmbShapeChange(Sender: TObject);
|
||||
@ -131,7 +126,7 @@ begin
|
||||
DoShapeChanged(TChartLabelShape(cmbShape.ItemIndex));
|
||||
end;
|
||||
|
||||
procedure TChartShapeBrushPenMarginsFrame.DoChanged;
|
||||
procedure TChartShapeBrushPenMarginsFrame.DoChange;
|
||||
begin
|
||||
if (FLockEvents = 0) and Assigned(FOnChange) then
|
||||
FOnChange(Self);
|
||||
@ -146,25 +141,25 @@ end;
|
||||
procedure TChartShapeBrushPenMarginsFrame.seBottomMarginChange(Sender: TObject);
|
||||
begin
|
||||
FMargins.Bottom := seBottomMargin.Value;
|
||||
DoChanged;
|
||||
DoChange;
|
||||
end;
|
||||
|
||||
procedure TChartShapeBrushPenMarginsFrame.seLeftMarginChange(Sender: TObject);
|
||||
begin
|
||||
FMargins.Left := seLeftMargin.Value;
|
||||
DoChanged;
|
||||
DoChange;
|
||||
end;
|
||||
|
||||
procedure TChartShapeBrushPenMarginsFrame.seRightMarginChange(Sender: TObject);
|
||||
begin
|
||||
FMargins.Right := seRightMargin.Value;
|
||||
DoChanged;
|
||||
DoChange;
|
||||
end;
|
||||
|
||||
procedure TChartShapeBrushPenMarginsFrame.seTopMarginChange(Sender: TObject);
|
||||
begin
|
||||
FMargins.Top := seTopMargin.Value;
|
||||
DoChanged;
|
||||
DoChange;
|
||||
end;
|
||||
|
||||
procedure TChartShapeBrushPenMarginsFrame.GetData(out AShape: TChartLabelShape;
|
||||
@ -173,11 +168,9 @@ begin
|
||||
AShape := TChartLabelShape(cmbShape.ItemIndex);
|
||||
if HandleAllocated then
|
||||
begin
|
||||
if cbFilled.Checked then ABrush.Style := bsSolid else ABrush.Style := bsClear;
|
||||
ABrush.Color := cbFillColor.ButtonColor;
|
||||
APen.Visible := cbShowBorder.Checked;
|
||||
FBrushFrame.GetData(ABrush);
|
||||
FPenFrame.GetData(APen);
|
||||
APen.Style := psSolid;
|
||||
APen.Color := cbBorderColor.ButtonColor;
|
||||
end;
|
||||
AMargins.Top := seTopMargin.Value;
|
||||
AMargins.Left := seLeftMargin.Value;
|
||||
@ -189,30 +182,24 @@ procedure TChartShapeBrushPenMarginsFrame.Prepare(AShape: TChartLabelShape;
|
||||
ABrush: TBrush; APen: TChartPen; AMargins: TChartLabelMargins);
|
||||
begin
|
||||
inc(FLockEvents);
|
||||
|
||||
FShape := AShape;
|
||||
FBrush := ABrush;
|
||||
FPen := APen;
|
||||
FMargins := AMargins;
|
||||
|
||||
cmbShape.ItemIndex := ord(AShape);
|
||||
cbFilled.Checked := ABrush.Style <> bsClear;
|
||||
cbFillColor.ButtonColor := ColorToRGB(ABrush.Color);
|
||||
cbShowBorder.Checked := APen.EffVisible;
|
||||
if APen.Color = clDefault then
|
||||
cbBorderColor.ButtonColor := ColorToRGB(clWindowText)
|
||||
else
|
||||
cbBorderColor.ButtonColor := ColorToRGB(APen.Color);
|
||||
cmbShape.Enabled := APen.EffVisible or (ABrush.Style <> bsClear);
|
||||
gbMargins.Enabled := cmbShape.Enabled;
|
||||
FBrushFrame.Prepare(ABrush);
|
||||
FPenFrame.Prepare(APen);
|
||||
seTopMargin.Value := AMargins.Top;
|
||||
seLeftMargin.Value := AMargins.Left;
|
||||
seRightMargin.Value := AMargins.Right;
|
||||
seBottomMargin.Value := AMargins.Bottom;
|
||||
dec(FLockEvents);
|
||||
end;
|
||||
|
||||
procedure TChartShapeBrushPenMarginsFrame.UpdateControls;
|
||||
begin
|
||||
cbBorderColor.Visible := cbShowBorder.Checked;
|
||||
cmbShape.Enabled := cbShowBorder.Checked or cbFilled.Checked;
|
||||
cbFillColor.Visible := cbFilled.Checked;
|
||||
dec(FLockEvents);
|
||||
|
||||
end;
|
||||
|
||||
end.
|
||||
|
44
components/tachart/demo/charteditor/cesimplebrushframe.lfm
Normal file
44
components/tachart/demo/charteditor/cesimplebrushframe.lfm
Normal file
@ -0,0 +1,44 @@
|
||||
object SimpleChartBrushFrame: TSimpleChartBrushFrame
|
||||
Left = 0
|
||||
Height = 151
|
||||
Top = 0
|
||||
Width = 120
|
||||
ClientHeight = 151
|
||||
ClientWidth = 120
|
||||
TabOrder = 0
|
||||
DesignLeft = 275
|
||||
DesignTop = 131
|
||||
object cbFilled: TCheckBox
|
||||
AnchorSideLeft.Control = Owner
|
||||
AnchorSideTop.Control = cbFillColor
|
||||
AnchorSideTop.Side = asrCenter
|
||||
AnchorSideRight.Control = cbFillColor
|
||||
Left = 0
|
||||
Height = 19
|
||||
Top = 3
|
||||
Width = 80
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
BorderSpacing.Top = 6
|
||||
BorderSpacing.Right = 8
|
||||
Caption = 'Filled'
|
||||
OnChange = cbFilledChange
|
||||
TabOrder = 0
|
||||
end
|
||||
object cbFillColor: TColorButton
|
||||
AnchorSideTop.Control = Owner
|
||||
AnchorSideRight.Control = Owner
|
||||
AnchorSideRight.Side = asrBottom
|
||||
Left = 88
|
||||
Height = 25
|
||||
Top = 0
|
||||
Width = 32
|
||||
Anchors = [akTop, akRight]
|
||||
BorderSpacing.Left = 8
|
||||
BorderWidth = 2
|
||||
ButtonColorSize = 16
|
||||
ButtonColor = clBlack
|
||||
Enabled = False
|
||||
Margin = 2
|
||||
OnColorChanged = cbFillColorColorChanged
|
||||
end
|
||||
end
|
84
components/tachart/demo/charteditor/cesimplebrushframe.pas
Normal file
84
components/tachart/demo/charteditor/cesimplebrushframe.pas
Normal file
@ -0,0 +1,84 @@
|
||||
unit ceSimpleBrushFrame;
|
||||
|
||||
{$mode ObjFPC}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, Graphics, Forms, Controls, StdCtrls, Dialogs;
|
||||
|
||||
type
|
||||
|
||||
{ TSimpleChartBrushFrame }
|
||||
|
||||
TSimpleChartBrushFrame = class(TFrame)
|
||||
cbFillColor: TColorButton;
|
||||
cbFilled: TCheckBox;
|
||||
procedure cbFillColorColorChanged(Sender: TObject);
|
||||
procedure cbFilledChange(Sender: TObject);
|
||||
private
|
||||
FBrush: TBrush;
|
||||
FOnChange: TNotifyEvent;
|
||||
FOnVisibleChange: TNotifyEvent;
|
||||
procedure DoChange;
|
||||
public
|
||||
constructor Create(AOwner: TComponent); override;
|
||||
procedure GetData(ABrush: TBrush);
|
||||
procedure Prepare(ABrush: TBrush);
|
||||
property OnChange: TNotifyEvent read FOnChange write FOnChange;
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
||||
{$R *.lfm}
|
||||
|
||||
constructor TSimpleChartBrushFrame.Create(AOwner: TComponent);
|
||||
begin
|
||||
inherited;
|
||||
cbFillColor.Width := cbFillColor.Height;
|
||||
end;
|
||||
|
||||
procedure TSimpleChartBrushFrame.cbFillColorColorChanged(Sender: TObject);
|
||||
var
|
||||
bs: TBrushStyle;
|
||||
begin
|
||||
// Be careful: Setting the Brush.Color switches the Style of a transparent brush
|
||||
// to solid. --> We store the style to reset it and after changing the color.
|
||||
bs := FBrush.Style;
|
||||
FBrush.Color := cbFillColor.ButtonColor;
|
||||
FBrush.Style := bs;
|
||||
DoChange;
|
||||
end;
|
||||
|
||||
procedure TSimpleChartBrushFrame.cbFilledChange(Sender: TObject);
|
||||
begin
|
||||
if cbFilled.Checked then FBrush.Style := bsSolid else FBrush.Style := bsClear;
|
||||
cbFillColor.Enabled := cbFilled.Checked;
|
||||
DoChange;
|
||||
end;
|
||||
|
||||
procedure TSimpleChartBrushFrame.DoChange;
|
||||
begin
|
||||
if Assigned(FOnChange) then FOnChange(FBrush);
|
||||
end;
|
||||
|
||||
// Transfers the properties of the GUI elements (or the internal brush) to the
|
||||
// brush provided as parameter.
|
||||
procedure TSimpleChartBrushFrame.GetData(ABrush: TBrush);
|
||||
begin
|
||||
ABrush.Assign(FBrush);
|
||||
end;
|
||||
|
||||
// Applies the brush properties to the GUI elements
|
||||
procedure TSimpleChartBrushFrame.Prepare(ABrush: TBrush);
|
||||
begin
|
||||
FBrush := ABrush;
|
||||
cbFilled.Checked := ABrush.Style <> bsClear;
|
||||
if ABrush.Color = clDefault then
|
||||
cbFillColor.ButtonColor := ColorToRGB(clWindow)
|
||||
else
|
||||
cbFillColor.ButtonColor := ColorToRGB(ABrush.Color);
|
||||
end;
|
||||
|
||||
end.
|
||||
|
79
components/tachart/demo/charteditor/cesimplepenframe.lfm
Normal file
79
components/tachart/demo/charteditor/cesimplepenframe.lfm
Normal file
@ -0,0 +1,79 @@
|
||||
object SimpleChartPenFrame: TSimpleChartPenFrame
|
||||
Left = 0
|
||||
Height = 62
|
||||
Top = 0
|
||||
Width = 120
|
||||
ClientHeight = 62
|
||||
ClientWidth = 120
|
||||
OnResize = FrameResize
|
||||
TabOrder = 0
|
||||
DesignLeft = 620
|
||||
DesignTop = 210
|
||||
object cbVisible: TCheckBox
|
||||
AnchorSideLeft.Control = Owner
|
||||
AnchorSideTop.Control = cbPenColor
|
||||
AnchorSideTop.Side = asrCenter
|
||||
Left = 0
|
||||
Height = 19
|
||||
Top = 3
|
||||
Width = 54
|
||||
BorderSpacing.Top = 8
|
||||
Caption = 'Visible'
|
||||
OnChange = cbVisibleChange
|
||||
TabOrder = 0
|
||||
end
|
||||
object cbPenColor: TColorButton
|
||||
AnchorSideLeft.Control = cbVisible
|
||||
AnchorSideLeft.Side = asrBottom
|
||||
AnchorSideTop.Control = Owner
|
||||
AnchorSideRight.Control = Owner
|
||||
AnchorSideRight.Side = asrBottom
|
||||
Left = 70
|
||||
Height = 25
|
||||
Top = 0
|
||||
Width = 30
|
||||
BorderSpacing.Left = 16
|
||||
BorderSpacing.Bottom = 6
|
||||
BorderWidth = 2
|
||||
ButtonColorSize = 16
|
||||
ButtonColor = clBlack
|
||||
Enabled = False
|
||||
Margin = 2
|
||||
OnColorChanged = cbPenColorColorChanged
|
||||
end
|
||||
object cbPenWidth: TChartComboBox
|
||||
AnchorSideLeft.Control = lblPenWidth
|
||||
AnchorSideLeft.Side = asrBottom
|
||||
AnchorSideTop.Control = cbPenColor
|
||||
AnchorSideTop.Side = asrBottom
|
||||
AnchorSideRight.Control = Owner
|
||||
AnchorSideRight.Side = asrBottom
|
||||
Left = 40
|
||||
Height = 22
|
||||
Top = 33
|
||||
Width = 80
|
||||
Mode = ccmPenWidth
|
||||
Options = [ccoPatternBrush, ccoPatternPen]
|
||||
PenPattern = '1|1'
|
||||
PointerStyle = psNone
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
BorderSpacing.Left = 8
|
||||
BorderSpacing.Top = 8
|
||||
Enabled = False
|
||||
ItemHeight = 16
|
||||
ItemIndex = 0
|
||||
TabOrder = 1
|
||||
OnChange = cbPenWidthChange
|
||||
end
|
||||
object lblPenWidth: TLabel
|
||||
AnchorSideLeft.Control = Owner
|
||||
AnchorSideTop.Control = cbPenWidth
|
||||
AnchorSideTop.Side = asrCenter
|
||||
Left = 0
|
||||
Height = 15
|
||||
Top = 37
|
||||
Width = 32
|
||||
Caption = 'Width'
|
||||
Enabled = False
|
||||
end
|
||||
end
|
120
components/tachart/demo/charteditor/cesimplepenframe.pas
Normal file
120
components/tachart/demo/charteditor/cesimplepenframe.pas
Normal file
@ -0,0 +1,120 @@
|
||||
unit ceSimplePenFrame;
|
||||
|
||||
{$mode ObjFPC}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, Graphics, Forms, Controls, StdCtrls, Dialogs,
|
||||
TATypes, TAChartCombos;
|
||||
|
||||
type
|
||||
|
||||
{ TSimpleChartPenFrame }
|
||||
|
||||
TSimpleChartPenFrame = class(TFrame)
|
||||
cbPenColor: TColorButton;
|
||||
cbVisible: TCheckBox;
|
||||
cbPenWidth: TChartComboBox;
|
||||
lblPenWidth: TLabel;
|
||||
procedure cbPenColorColorChanged(Sender: TObject);
|
||||
procedure cbPenWidthChange(Sender: TObject);
|
||||
procedure cbVisibleChange(Sender: TObject);
|
||||
procedure FrameResize(Sender: TObject);
|
||||
private
|
||||
FPen: TChartPen;
|
||||
FOnChange: TNotifyEvent;
|
||||
FOnVisibleChange: TNotifyEvent;
|
||||
procedure DoChange;
|
||||
function GetWidthLeft: Integer;
|
||||
procedure SetWidthLeft(const AValue: Integer);
|
||||
public
|
||||
constructor Create(AOwner: TComponent); override;
|
||||
procedure GetData(APen: TChartPen);
|
||||
procedure Prepare(APen: TChartPen);
|
||||
property WidthLeft: Integer read GetWidthLeft write SetWidthLeft;
|
||||
property OnChange: TNotifyEvent read FOnChange write FOnChange;
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
||||
{$R *.lfm}
|
||||
|
||||
uses
|
||||
LCLIntf, LCLType;
|
||||
|
||||
{ TSimpleChartPenFrame }
|
||||
|
||||
constructor TSimpleChartPenFrame.Create(AOwner: TComponent);
|
||||
begin
|
||||
inherited Create(AOwner);
|
||||
cbPenWidth.DropdownCount := DEFAULT_DROPDOWN_COUNT;
|
||||
cbPenColor.Width := cbPenColor.Height;
|
||||
end;
|
||||
|
||||
procedure TSimpleChartPenFrame.cbPenColorColorChanged(Sender: TObject);
|
||||
begin
|
||||
FPen.Color := cbPenColor.ButtonColor;
|
||||
DoChange;
|
||||
end;
|
||||
|
||||
procedure TSimpleChartPenFrame.cbPenWidthChange(Sender: TObject);
|
||||
begin
|
||||
FPen.Width := cbPenWidth.PenWidth;
|
||||
DoChange;
|
||||
end;
|
||||
|
||||
procedure TSimpleChartPenFrame.cbVisibleChange(Sender: TObject);
|
||||
begin
|
||||
FPen.Visible := cbVisible.Checked;
|
||||
if FPen.Visible then FPen.Style := psSolid else FPen.Style := psClear;
|
||||
cbPenColor.Enabled := cbVisible.Checked;
|
||||
cbPenWidth.Enabled := cbVisible.Checked;
|
||||
lblPenWidth.Enabled := cbVisible.Checked;
|
||||
DoChange;
|
||||
end;
|
||||
|
||||
procedure TSimpleChartPenFrame.DoChange;
|
||||
begin
|
||||
if Assigned(FOnChange) then FOnChange(FPen);
|
||||
end;
|
||||
|
||||
procedure TSimpleChartPenFrame.FrameResize(Sender: TObject);
|
||||
begin
|
||||
cbPenWidth.SymbolWidth := cbPenWidth.ClientWidth - GetSystemMetrics(SM_CXVSCROLL) - 16;
|
||||
end;
|
||||
|
||||
// Transfers the properties of the GUI elements (or the internal pen) to the pen.
|
||||
procedure TSimpleChartPenFrame.GetData(APen: TChartPen);
|
||||
begin
|
||||
APen.Assign(FPen);
|
||||
end;
|
||||
|
||||
function TSimpleChartPenFrame.GetWidthLeft: Integer;
|
||||
begin
|
||||
Result := cbPenWidth.Left;
|
||||
end;
|
||||
|
||||
// Applies the pen properties to the GUI elements
|
||||
procedure TSimpleChartPenFrame.Prepare(APen: TChartPen);
|
||||
begin
|
||||
FPen := APen;
|
||||
cbVisible.Checked := APen.EffVisible;
|
||||
cbPenWidth.PenWidth := APen.Width;
|
||||
if APen.Color = clDefault then
|
||||
cbPenColor.ButtonColor := ColorToRGB(clWindowText)
|
||||
else
|
||||
cbPenColor.ButtonColor := ColorToRGB(APen.Color);
|
||||
end;
|
||||
|
||||
procedure TSimpleChartPenFrame.SetWidthLeft(const AValue: Integer);
|
||||
var
|
||||
d: Integer;
|
||||
begin
|
||||
d := AValue - lblPenWidth.Width;
|
||||
if d > 0 then
|
||||
cbPenWidth.BorderSpacing.Left := d;
|
||||
end;
|
||||
|
||||
end.
|
||||
|
@ -1,10 +1,10 @@
|
||||
object ChartTitleFootFrame: TChartTitleFootFrame
|
||||
Left = 0
|
||||
Height = 432
|
||||
Height = 394
|
||||
Top = 0
|
||||
Width = 423
|
||||
ClientHeight = 432
|
||||
ClientWidth = 423
|
||||
Width = 429
|
||||
ClientHeight = 394
|
||||
ClientWidth = 429
|
||||
TabOrder = 0
|
||||
DesignLeft = 500
|
||||
DesignTop = 237
|
||||
@ -12,12 +12,12 @@ object ChartTitleFootFrame: TChartTitleFootFrame
|
||||
Left = 0
|
||||
Height = 25
|
||||
Top = 0
|
||||
Width = 423
|
||||
Width = 429
|
||||
Align = alTop
|
||||
AutoSize = True
|
||||
BevelOuter = bvNone
|
||||
ClientHeight = 25
|
||||
ClientWidth = 423
|
||||
ClientWidth = 429
|
||||
TabOrder = 0
|
||||
object cbShow: TCheckBox
|
||||
Left = 0
|
||||
@ -44,27 +44,42 @@ object ChartTitleFootFrame: TChartTitleFootFrame
|
||||
OnClick = cbWordwrapClick
|
||||
TabOrder = 1
|
||||
end
|
||||
object cbHTML: TCheckBox
|
||||
AnchorSideLeft.Control = cbWordwrap
|
||||
AnchorSideLeft.Side = asrBottom
|
||||
AnchorSideTop.Control = PanelTop
|
||||
Left = 188
|
||||
Height = 19
|
||||
Top = 0
|
||||
Width = 133
|
||||
BorderSpacing.Left = 32
|
||||
Caption = 'Support HTML in text'
|
||||
OnChange = cbHTMLChange
|
||||
TabOrder = 2
|
||||
end
|
||||
end
|
||||
object ParamsPanel: TPanel
|
||||
Left = 0
|
||||
Height = 187
|
||||
Top = 237
|
||||
Width = 423
|
||||
Top = 199
|
||||
Width = 429
|
||||
Align = alBottom
|
||||
BorderSpacing.Top = 16
|
||||
BorderSpacing.Bottom = 8
|
||||
BevelOuter = bvNone
|
||||
ClientHeight = 187
|
||||
ClientWidth = 423
|
||||
ClientWidth = 429
|
||||
TabOrder = 2
|
||||
object rgAlignment: TRadioGroup
|
||||
AnchorSideLeft.Control = ParamsPanel
|
||||
AnchorSideTop.Control = ParamsPanel
|
||||
AnchorSideRight.Control = Bevel1
|
||||
AnchorSideBottom.Side = asrBottom
|
||||
Left = 0
|
||||
Height = 51
|
||||
Top = 0
|
||||
Width = 211
|
||||
Width = 202
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
AutoFill = True
|
||||
AutoSize = True
|
||||
Caption = 'Alignment'
|
||||
@ -78,7 +93,7 @@ object ChartTitleFootFrame: TChartTitleFootFrame
|
||||
ChildSizing.Layout = cclLeftToRightThenTopToBottom
|
||||
ChildSizing.ControlsPerLine = 3
|
||||
ClientHeight = 31
|
||||
ClientWidth = 207
|
||||
ClientWidth = 198
|
||||
Columns = 3
|
||||
ItemIndex = 0
|
||||
Items.Strings = (
|
||||
@ -90,19 +105,18 @@ object ChartTitleFootFrame: TChartTitleFootFrame
|
||||
TabOrder = 0
|
||||
end
|
||||
object gbShapeBrushPenMargins: TGroupBox
|
||||
AnchorSideLeft.Control = rgAlignment
|
||||
AnchorSideLeft.Control = Bevel1
|
||||
AnchorSideLeft.Side = asrBottom
|
||||
AnchorSideTop.Control = rgAlignment
|
||||
AnchorSideRight.Control = ParamsPanel
|
||||
AnchorSideRight.Side = asrBottom
|
||||
Left = 235
|
||||
Left = 226
|
||||
Height = 168
|
||||
Top = 0
|
||||
Width = 188
|
||||
Width = 203
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
BorderSpacing.Left = 24
|
||||
Caption = 'Title/footer background'
|
||||
TabOrder = 2
|
||||
Caption = 'gbShapeBrushPenMargins'
|
||||
TabOrder = 3
|
||||
end
|
||||
object gbFont: TGroupBox
|
||||
AnchorSideLeft.Control = rgAlignment
|
||||
@ -113,23 +127,78 @@ object ChartTitleFootFrame: TChartTitleFootFrame
|
||||
Left = 0
|
||||
Height = 61
|
||||
Top = 67
|
||||
Width = 211
|
||||
Width = 202
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
BorderSpacing.Top = 16
|
||||
Caption = 'Font'
|
||||
Caption = 'gbFont'
|
||||
TabOrder = 1
|
||||
end
|
||||
object Bevel1: TBevel
|
||||
AnchorSideLeft.Control = ParamsPanel
|
||||
AnchorSideLeft.Side = asrCenter
|
||||
AnchorSideTop.Control = rgAlignment
|
||||
Left = 202
|
||||
Height = 50
|
||||
Top = 0
|
||||
Width = 24
|
||||
Shape = bsSpacer
|
||||
end
|
||||
object gbMargin: TGroupBox
|
||||
AnchorSideLeft.Control = ParamsPanel
|
||||
AnchorSideTop.Control = gbFont
|
||||
AnchorSideTop.Side = asrBottom
|
||||
AnchorSideRight.Control = gbFont
|
||||
AnchorSideRight.Side = asrBottom
|
||||
Left = 0
|
||||
Height = 51
|
||||
Top = 144
|
||||
Width = 202
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
AutoSize = True
|
||||
BorderSpacing.Top = 16
|
||||
Caption = 'Distance to chart'
|
||||
ClientHeight = 31
|
||||
ClientWidth = 198
|
||||
TabOrder = 2
|
||||
object lblMargin: TLabel
|
||||
AnchorSideLeft.Control = gbMargin
|
||||
Left = 16
|
||||
Height = 15
|
||||
Top = 5
|
||||
Width = 38
|
||||
BorderSpacing.Left = 16
|
||||
Caption = 'Margin'
|
||||
end
|
||||
object seMargin: TSpinEdit
|
||||
AnchorSideLeft.Control = lblMargin
|
||||
AnchorSideLeft.Side = asrBottom
|
||||
AnchorSideTop.Control = gbMargin
|
||||
AnchorSideRight.Control = gbMargin
|
||||
AnchorSideRight.Side = asrBottom
|
||||
Left = 70
|
||||
Height = 23
|
||||
Top = 0
|
||||
Width = 72
|
||||
Alignment = taRightJustify
|
||||
BorderSpacing.Left = 16
|
||||
BorderSpacing.Right = 8
|
||||
BorderSpacing.Bottom = 8
|
||||
MaxValue = 1000
|
||||
OnChange = seMarginChange
|
||||
TabOrder = 0
|
||||
end
|
||||
end
|
||||
end
|
||||
object MemoPanel: TPanel
|
||||
AnchorSideTop.Side = asrBottom
|
||||
Left = 0
|
||||
Height = 196
|
||||
Height = 158
|
||||
Top = 25
|
||||
Width = 423
|
||||
Width = 429
|
||||
Align = alClient
|
||||
BevelOuter = bvNone
|
||||
ClientHeight = 196
|
||||
ClientWidth = 423
|
||||
ClientHeight = 158
|
||||
ClientWidth = 429
|
||||
Constraints.MinHeight = 80
|
||||
TabOrder = 1
|
||||
object lblText: TLabel
|
||||
@ -150,14 +219,15 @@ object ChartTitleFootFrame: TChartTitleFootFrame
|
||||
AnchorSideBottom.Control = MemoPanel
|
||||
AnchorSideBottom.Side = asrBottom
|
||||
Left = 0
|
||||
Height = 177
|
||||
Height = 139
|
||||
Top = 19
|
||||
Width = 423
|
||||
Width = 429
|
||||
Anchors = [akTop, akLeft, akRight, akBottom]
|
||||
BorderSpacing.Top = 4
|
||||
OnChange = mmoTextChange
|
||||
ScrollBars = ssAutoBoth
|
||||
TabOrder = 0
|
||||
WordWrap = False
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -1,12 +1,11 @@
|
||||
unit ceTitleFootFrame;
|
||||
|
||||
{$mode ObjFPC}{$H+}
|
||||
{.$DEFINE WYSIWYG_TITLE}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, Forms, Controls, ExtCtrls, StdCtrls,
|
||||
Classes, SysUtils, Forms, Controls, ExtCtrls, StdCtrls, Spin,
|
||||
TATextElements, TAGraph,
|
||||
ceFontFrame, ceShapeBrushPenMarginsFrame;
|
||||
|
||||
@ -15,20 +14,27 @@ type
|
||||
{ TChartTitleFootFrame }
|
||||
|
||||
TChartTitleFootFrame = class(TFrame)
|
||||
Bevel1: TBevel;
|
||||
cbShow: TCheckBox;
|
||||
cbWordwrap: TCheckBox;
|
||||
cbHTML: TCheckBox;
|
||||
gbFont: TGroupBox;
|
||||
gbShapeBrushPenMargins: TGroupBox;
|
||||
gbMargin: TGroupBox;
|
||||
lblMargin: TLabel;
|
||||
lblText: TLabel;
|
||||
MemoPanel: TPanel;
|
||||
mmoText: TMemo;
|
||||
PanelTop: TPanel;
|
||||
ParamsPanel: TPanel;
|
||||
rgAlignment: TRadioGroup;
|
||||
seMargin: TSpinEdit;
|
||||
procedure cbHTMLChange(Sender: TObject);
|
||||
procedure cbShowChange(Sender: TObject);
|
||||
procedure cbWordwrapClick(Sender: TObject);
|
||||
procedure mmoTextChange(Sender: TObject);
|
||||
procedure rgAlignmentClick(Sender: TObject);
|
||||
procedure seMarginChange(Sender: TObject);
|
||||
private
|
||||
FTitle: TChartTitle;
|
||||
FFontFrame: TChartFontFrame;
|
||||
@ -51,6 +57,7 @@ implementation
|
||||
{$R *.lfm}
|
||||
|
||||
uses
|
||||
Math, TAChartUtils,
|
||||
ceUtils;
|
||||
|
||||
constructor TChartTitleFootFrame.Create(AOwner: TComponent);
|
||||
@ -58,24 +65,27 @@ begin
|
||||
inherited;
|
||||
|
||||
FFontFrame := TChartFontFrame.Create(self);
|
||||
FFontFrame.Parent := gbFont;
|
||||
FFontFrame.Name := '';
|
||||
FFontFrame.Align := alClient;
|
||||
FFontFrame.BorderSpacing.Left := 8;
|
||||
FFontFrame.BorderSpacing.Right := 8;
|
||||
FFontFrame.OnChange := @ChangedHandler;
|
||||
FFontFrame.Parent := gbFont;
|
||||
gbFont.AutoSize := true;
|
||||
gbFont.Caption := 'Font';
|
||||
|
||||
FShapeBrushPenMarginsFrame := TChartShapeBrushPenMarginsFrame.Create(self);
|
||||
FShapeBrushPenMarginsFrame.Parent := gbShapeBrushPenMargins;
|
||||
FShapeBrushPenMarginsFrame.Name := '';
|
||||
FShapeBrushPenMarginsFrame.Align := alClient;
|
||||
FShapeBrushPenMarginsFrame.BorderSpacing.Left := 8;
|
||||
FShapeBrushPenMarginsFrame.BorderSpacing.Right := 8;
|
||||
FShapeBrushPenMarginsFrame.BorderSpacing.Bottom := 8;
|
||||
FShapeBrushPenMarginsFrame.Constraints.MinWidth := 230;
|
||||
FShapeBrushPenMarginsFrame.OnChange := @ChangedHandler;
|
||||
FShapeBrushPenMarginsFrame.OnShapeChange := @ShapeChangedHandler;
|
||||
FShapeBrushPenMarginsFrame.AutoSize := true;
|
||||
FShapeBrushPenMarginsFrame.Parent := gbShapeBrushPenMargins;
|
||||
gbShapeBrushPenMargins.AutoSize := true;
|
||||
// Caption of this groupbox depends on title/footer. Will be set by Prepare.
|
||||
|
||||
BoldHeaders(Self);
|
||||
|
||||
@ -90,11 +100,10 @@ begin
|
||||
MemoPanel.Constraints.MinHeight +
|
||||
ParamsPanel.Height + ParamsPanel.BorderSpacing.Top + ParamsPanel.BorderSpacing.Bottom;
|
||||
|
||||
PreferredWidth := gbFont.Width +
|
||||
PreferredWidth := Max(gbFont.Width, rgAlignment.Width) +
|
||||
gbShapeBrushPenMargins.Width + gbShapeBrushPenMargins.BorderSpacing.Left;
|
||||
end;
|
||||
|
||||
|
||||
procedure TChartTitleFootFrame.cbShowChange(Sender: TObject);
|
||||
begin
|
||||
FTitle.Visible := cbShow.Checked;
|
||||
@ -104,6 +113,13 @@ begin
|
||||
gbShapeBrushPenMargins.Visible := cbShow.Checked;
|
||||
gbFont.Visible := cbShow.Checked;
|
||||
cbWordwrap.Visible := cbShow.Checked;
|
||||
cbHTML.Visible := cbShow.Checked;
|
||||
gbMargin.Visible := cbShow.Checked;
|
||||
end;
|
||||
|
||||
procedure TChartTitleFootFrame.cbHTMLChange(Sender: TObject);
|
||||
begin
|
||||
FTitle.TextFormat := TEXT_FORMAT[cbHTML.Checked];
|
||||
end;
|
||||
|
||||
procedure TChartTitleFootFrame.cbWordwrapClick(Sender: TObject);
|
||||
@ -114,10 +130,6 @@ end;
|
||||
procedure TChartTitleFootFrame.ChangedHandler(Sender: TObject);
|
||||
begin
|
||||
GetChart.Invalidate;
|
||||
{$IFDEF WYSIWYG_TITLE}
|
||||
mmoText.Font.Assign(FTitle.Font);
|
||||
mmoText.Color := FTitle.Brush.Color;
|
||||
{$ENDIF}
|
||||
end;
|
||||
|
||||
function TChartTitleFootFrame.GetAlignment: TAlignment;
|
||||
@ -137,27 +149,34 @@ begin
|
||||
FTitle.Text.Assign(mmoText.Lines);
|
||||
end;
|
||||
|
||||
procedure TChartTitleFootFrame.rgAlignmentClick(Sender: TObject);
|
||||
begin
|
||||
FTitle.Alignment := GetAlignment;
|
||||
end;
|
||||
|
||||
procedure TChartTitleFootFrame.Prepare(ATitle: TChartTitle);
|
||||
begin
|
||||
FTitle := ATitle;
|
||||
|
||||
cbShow.Checked := ATitle.Visible;
|
||||
cbWordwrap.Checked := ATitle.Wordwrap;
|
||||
cbHTML.Checked := (ATitle.TextFormat = tfHTML);
|
||||
seMargin.Value := ATitle.Margin;
|
||||
mmoText.Lines.Assign(ATitle.Text);
|
||||
{$IFDEF WYSIWYG_TITLE}
|
||||
mmoText.Font.Assign(ATitle.Font);
|
||||
mmoText.Font.Orientation := 0;
|
||||
{$ENDIF}
|
||||
|
||||
SetAlignment(ATitle.Alignment);
|
||||
|
||||
FFontFrame.Prepare(ATitle.Font, false);
|
||||
FShapeBrushPenMarginsFrame.Prepare(ATitle.Shape, ATitle.Brush, ATitle.Frame, ATitle.Margins);
|
||||
if ATitle = GetChart.Title then
|
||||
gbShapeBrushPenMargins.Caption := 'Title background'
|
||||
else
|
||||
gbShapeBrushPenMargins.Caption := 'Footer background';
|
||||
end;
|
||||
|
||||
procedure TChartTitleFootFrame.rgAlignmentClick(Sender: TObject);
|
||||
begin
|
||||
FTitle.Alignment := GetAlignment;
|
||||
end;
|
||||
|
||||
procedure TChartTitleFootFrame.seMarginChange(Sender: TObject);
|
||||
begin
|
||||
FTitle.Margin := seMargin.Value;
|
||||
end;
|
||||
|
||||
procedure TChartTitleFootFrame.SetAlignment(AValue: TAlignment);
|
||||
|
@ -5,10 +5,12 @@ unit ceUtils;
|
||||
interface
|
||||
|
||||
uses
|
||||
Graphics, Classes, SysUtils, Controls;
|
||||
Graphics, Classes, SysUtils, Controls,
|
||||
TAChartUtils;
|
||||
|
||||
const
|
||||
DEFAULT_DROPDOWN_COUNT = 32;
|
||||
TEXT_FORMAT: array[boolean] of TChartTextFormat = (tfNormal, tfHTML);
|
||||
|
||||
procedure BoldHeaders(AControl: TControl);
|
||||
|
||||
|
@ -170,6 +170,38 @@
|
||||
<ResourceBaseClass Value="DataModule"/>
|
||||
<UnitName Value="ceImages"/>
|
||||
</Unit>
|
||||
<Unit>
|
||||
<Filename Value="cesimplepenframe.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<ComponentName Value="SimpleChartPenFrame"/>
|
||||
<HasResources Value="True"/>
|
||||
<ResourceBaseClass Value="Frame"/>
|
||||
<UnitName Value="ceSimplePenFrame"/>
|
||||
</Unit>
|
||||
<Unit>
|
||||
<Filename Value="cesimplebrushframe.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<ComponentName Value="SimpleChartBrushFrame"/>
|
||||
<HasResources Value="True"/>
|
||||
<ResourceBaseClass Value="Frame"/>
|
||||
<UnitName Value="ceSimpleBrushFrame"/>
|
||||
</Unit>
|
||||
<Unit>
|
||||
<Filename Value="cemarksform.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<ComponentName Value="MarksForm"/>
|
||||
<HasResources Value="True"/>
|
||||
<ResourceBaseClass Value="Form"/>
|
||||
<UnitName Value="ceMarksForm"/>
|
||||
</Unit>
|
||||
<Unit>
|
||||
<Filename Value="cearrowframe.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<ComponentName Value="ChartArrowFrame"/>
|
||||
<HasResources Value="True"/>
|
||||
<ResourceBaseClass Value="Frame"/>
|
||||
<UnitName Value="ceArrowFrame"/>
|
||||
</Unit>
|
||||
</Units>
|
||||
</ProjectOptions>
|
||||
<CompilerOptions>
|
||||
|
@ -8,7 +8,8 @@ uses
|
||||
{$ENDIF}{$ENDIF}
|
||||
Interfaces, // this includes the LCL widgetset
|
||||
Forms, ceMain, ceSeriesDlg, cePointerFrame, ceTitleFootFrame, ceAxisFrame,
|
||||
ceSeriesFrame, ceChartEditor, ceImages;
|
||||
ceSeriesFrame, ceChartEditor, ceImages, ceSimplePenFrame, ceSimpleBrushFrame,
|
||||
ceMarksForm, ceArrowFrame;
|
||||
|
||||
{$R *.res}
|
||||
|
||||
@ -18,6 +19,7 @@ begin
|
||||
Application.Initialize;
|
||||
Application.CreateForm(TChartImagesDM, ChartImagesDM);
|
||||
Application.CreateForm(TMainForm, MainForm);
|
||||
Application.CreateForm(TMarksForm, MarksForm);
|
||||
Application.Run;
|
||||
end.
|
||||
|
||||
|
@ -374,7 +374,11 @@ begin
|
||||
|
||||
DrawLink(ADrawer, ADataPoint, ALabelCenter);
|
||||
with GetLabelBrush do begin
|
||||
clr := TColor(IfThen(Color = clDefault, FOwner.Color, Color));
|
||||
if Color = clDefault then
|
||||
begin
|
||||
if FOwner <> nil then clr := FOwner.Color else clr := clBtnFace;
|
||||
end else
|
||||
clr := Color;
|
||||
ADrawer.SetBrushParams(Style, ColorToRGB(clr));
|
||||
end;
|
||||
if IsMarginRequired then begin
|
||||
|
Loading…
Reference in New Issue
Block a user