mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-09 08:47:59 +02:00
TAChart/ChartEditor demo: Check that axis maximum is always greater than the minimum.
git-svn-id: trunk@65391 -
This commit is contained in:
parent
686e81d6e3
commit
7bf4f7da41
@ -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
|
||||
|
@ -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;
|
||||
|
@ -44,6 +44,7 @@ object ChartAxisFrame: TChartAxisFrame
|
||||
Align = alClient
|
||||
TabIndex = 1
|
||||
TabOrder = 1
|
||||
OnChanging = PageControlChanging
|
||||
object pgTitle: TTabSheet
|
||||
Caption = 'Title'
|
||||
ClientHeight = 418
|
||||
|
@ -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.
|
||||
|
||||
|
@ -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
|
||||
|
@ -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.
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user