diff --git a/components/tachart/demo/charteditor/ceaxisdlg.lfm b/components/tachart/demo/charteditor/ceaxisdlg.lfm index 59b7ccc6d4..645ab6aab0 100644 --- a/components/tachart/demo/charteditor/ceaxisdlg.lfm +++ b/components/tachart/demo/charteditor/ceaxisdlg.lfm @@ -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 diff --git a/components/tachart/demo/charteditor/ceaxisdlg.pas b/components/tachart/demo/charteditor/ceaxisdlg.pas index 50537b7070..18c5a3cf78 100644 --- a/components/tachart/demo/charteditor/ceaxisdlg.pas +++ b/components/tachart/demo/charteditor/ceaxisdlg.pas @@ -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; diff --git a/components/tachart/demo/charteditor/ceaxisframe.lfm b/components/tachart/demo/charteditor/ceaxisframe.lfm index 6271b3fecf..64e7025ee9 100644 --- a/components/tachart/demo/charteditor/ceaxisframe.lfm +++ b/components/tachart/demo/charteditor/ceaxisframe.lfm @@ -44,6 +44,7 @@ object ChartAxisFrame: TChartAxisFrame Align = alClient TabIndex = 1 TabOrder = 1 + OnChanging = PageControlChanging object pgTitle: TTabSheet Caption = 'Title' ClientHeight = 418 diff --git a/components/tachart/demo/charteditor/ceaxisframe.pas b/components/tachart/demo/charteditor/ceaxisframe.pas index 98a6a96f08..802444ffe1 100644 --- a/components/tachart/demo/charteditor/ceaxisframe.pas +++ b/components/tachart/demo/charteditor/ceaxisframe.pas @@ -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. diff --git a/components/tachart/demo/charteditor/cecharteditor.lfm b/components/tachart/demo/charteditor/cecharteditor.lfm index 4711fa6c11..a35e70f8bb 100644 --- a/components/tachart/demo/charteditor/cecharteditor.lfm +++ b/components/tachart/demo/charteditor/cecharteditor.lfm @@ -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 diff --git a/components/tachart/demo/charteditor/cecharteditor.pas b/components/tachart/demo/charteditor/cecharteditor.pas index ea4011646c..ad411709bd 100644 --- a/components/tachart/demo/charteditor/cecharteditor.pas +++ b/components/tachart/demo/charteditor/cecharteditor.pas @@ -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.