TAChart/ChartEditor demo: Check that axis maximum is always greater than the minimum.

git-svn-id: trunk@65391 -
This commit is contained in:
wp 2021-07-06 21:48:46 +00:00
parent 686e81d6e3
commit 7bf4f7da41
6 changed files with 116 additions and 6 deletions

View File

@ -11,7 +11,7 @@ object ChartAxisEditor: TChartAxisEditor
OnCreate = FormCreate
OnShow = FormShow
Position = poScreenCenter
LCLVersion = '2.1.0.0'
LCLVersion = '2.3.0.0'
object ButtonPanel: TButtonPanel
Left = 6
Height = 34

View File

@ -179,8 +179,17 @@ begin
end;
procedure TChartAxisEditor.OKButtonClick(Sender: TObject);
var
msg: String;
C: TWinControl;
begin
FOKClicked := true;
if not FAxisFrame.Validate(msg, C) then
begin
C.SetFocus;
MessageDlg(msg, mtError, [mbOK], 0);
ModalResult := mrNone;
end else
FOKClicked := true;
end;
procedure TChartAxisEditor.Prepare(Axis: TChartAxis;

View File

@ -44,6 +44,7 @@ object ChartAxisFrame: TChartAxisFrame
Align = alClient
TabIndex = 1
TabOrder = 1
OnChanging = PageControlChanging
object pgTitle: TTabSheet
Caption = 'Title'
ClientHeight = 418

View File

@ -83,6 +83,7 @@ type
procedure cbTitleVisibleChange(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);
@ -120,9 +121,12 @@ type
procedure CalculatePreferredSize(var PreferredWidth, PreferredHeight: integer;
{%H-}WithThemeSpace: Boolean); override;
function GetChart: TChart;
function GetRealAxisMax: Double;
function GetRealAxisMin: Double;
public
constructor Create(AOwner: TComponent); override;
procedure Prepare(Axis: TChartAxis);
function Validate(out AMsg: String; out AControl: TWinControl): Boolean;
property Page: TChartAxisEditorPage read GetPage write SetPage;
end;
@ -337,6 +341,22 @@ begin
Result := TChartAxisEditorPage(PageControl.ActivePageIndex);
end;
function TChartAxisFrame.GetRealAxisMax: Double;
begin
if cbAutoMax.Checked then
Result := FAxisMax
else
Result := seMaximum.Value;
end;
function TChartAxisFrame.GetRealAxisMin: Double;
begin
if cbAutoMin.Checked then
Result := FAxisMin
else
Result := seMinimum.Value;
end;
procedure TChartAxisFrame.LabelChangedHandler(Sender: TObject);
begin
GetChart.Invalidate;
@ -357,6 +377,20 @@ begin
FAxis.Title.Caption := mmoTitle.Lines.Text;
end;
procedure TChartAxisFrame.PageControlChanging(Sender: TObject;
var AllowChange: Boolean);
var
msg: String;
C: TWinControl;
begin
if not Validate(msg, C) then
begin
C.SetFocus;
MessageDlg(msg, mtError, [mbOK], 0);
AllowChange := false;
end;
end;
procedure TChartAxisFrame.Prepare(Axis: TChartAxis);
begin
FAxis := Axis;
@ -493,6 +527,23 @@ begin
FAxis.Title.Shape := AShape;
end;
function TChartAxisFrame.Validate(out AMsg: String; out AControl: TWinControl): Boolean;
begin
Result := false;
if GetRealAxisMin >= GetRealAxisMax then
begin
AMsg := 'The axis minimum must be smaller than the axis maximum.';
if seMaximum.Visible then
AControl := seMaximum
else if seMinimum.Visible then
AControl := seMinimum
else
AControl := cbAutoMax;
exit;
end;
Result := true;
end;
end.

View File

@ -10,7 +10,7 @@ object ChartEditorForm: TChartEditorForm
OnCloseQuery = FormCloseQuery
OnCreate = FormCreate
OnDestroy = FormDestroy
LCLVersion = '2.1.0.0'
LCLVersion = '2.3.0.0'
object ButtonPanel: TButtonPanel
Left = 6
Height = 34
@ -41,6 +41,7 @@ object ChartEditorForm: TChartEditorForm
Constraints.MinWidth = 120
Images = ChartImagesDM.ChartImages
TabOrder = 1
OnChanging = TreeChanging
OnDeletion = TreeDeletion
OnSelectionChanged = TreeSelectionChanged
end
@ -110,7 +111,6 @@ object ChartEditorForm: TChartEditorForm
Font.Color = clWindow
Font.Height = -16
Font.Style = [fsBold]
ParentColor = False
ParentFont = False
end
object Image1: TImage

View File

@ -29,6 +29,8 @@ type
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure OKButtonClick(Sender: TObject);
procedure TreeChanging(Sender: TObject; Node: TTreeNode;
var AllowChange: Boolean);
procedure TreeDeletion(Sender: TObject; Node: TTreeNode);
procedure TreeSelectionChanged(Sender: TObject);
private
@ -57,6 +59,7 @@ type
procedure SaveChartToStream;
procedure SelectNode(ANode: TTreeNode);
procedure RestoreChartFromStream;
function Validate(ANode: TTreeNode; out AMsg: String; out AControl: TWinControl): boolean;
public
procedure SelectAxis(AxisIndex: Integer; APage: TChartAxisEditorPage);
procedure SelectFooter;
@ -210,8 +213,17 @@ begin
end;
procedure TChartEditorForm.ApplyButtonClick(Sender: TObject);
var
msg: String;
C: TWinControl;
begin
RestoreChartFromStream;
if not Validate(Tree.Selected, msg, C) then
begin
C.SetFocus;
MessageDlg(msg, mtError, [mbOK], 0);
ModalResult := mrNone;
end else
RestoreChartFromStream;
end;
procedure TChartEditorForm.FormActivate(Sender: TObject);
@ -338,8 +350,31 @@ begin
end;
procedure TChartEditorForm.OKButtonClick(Sender: TObject);
var
msg: String;
C: TWinControl;
begin
FOKClicked := true;
if not Validate(Tree.selected, msg, C) then
begin
C.SetFocus;
MessageDlg(msg, mtError, [mbOK], 0);
ModalResult := mrNone;
end else
FOKClicked := true;
end;
procedure TChartEditorForm.TreeChanging(Sender: TObject; Node: TTreeNode;
var AllowChange: Boolean);
var
msg: String;
C: TWinControl;
begin
if not Validate(Tree.Selected, msg, C) then
begin
C.SetFocus;
MessageDlg(msg, mtError, [mbOk], 0);
AllowChange := false;
end;
end;
procedure TChartEditorForm.PopulateAxes(AChart: TChart);
@ -559,5 +594,19 @@ begin
ChartImagesDM.ChartImages.GetBitmap(Tree.Selected.ImageIndex, Image1.Picture.Bitmap);
end;
function TChartEditorForm.Validate(ANode: TTreeNode; out AMsg: String;
out AControl: TWinControl): Boolean;
begin
if ANode = nil then
exit(true);
if TObject(ANode.Data) is TChartAxisFrame then
begin
Result := TChartAxisFrame(ANode.Data).Validate(AMsg, AControl);
if not Result then exit;
end;
Result := true;
end;
end.