diff --git a/components/fpspreadsheet/examples/other/chart/write_chart_demo.lpr b/components/fpspreadsheet/examples/other/chart/write_chart_demo.lpr index 8c4847d26..f84ce90ab 100644 --- a/components/fpspreadsheet/examples/other/chart/write_chart_demo.lpr +++ b/components/fpspreadsheet/examples/other/chart/write_chart_demo.lpr @@ -116,6 +116,7 @@ begin ch.XAxis.MinorGridLines.Color := scBlue; ch.XAxis.MajorGridLines.Style := clsNoLine; //Solid; ch.XAxis.MinorGridLines.Style := clsNoLine; //Solid; + ch.XAxis.Position := capStart; ch.YAxis.ShowLabels := true; ch.YAxis.LabelFont.Size := 8; @@ -192,6 +193,8 @@ begin ch.YAxis.CaptionFont.Size := 18; ch.XAxis.LabelFont.Style := [fssItalic]; ch.YAxis.LabelFont.Style := [fssItalic]; + ch.YAxis.MajorTicks := [catInside, catOutside]; + ch.YAxis.MinorTicks := [catOutside]; b.WriteToFile('test.xlsx', true); // Excel fails to open the file b.WriteToFile('test.ods', true); diff --git a/components/fpspreadsheet/source/common/fpschart.pas b/components/fpspreadsheet/source/common/fpschart.pas index 228b1bc98..015c8d31f 100644 --- a/components/fpspreadsheet/source/common/fpschart.pas +++ b/components/fpspreadsheet/source/common/fpschart.pas @@ -111,6 +111,8 @@ type end; TsChartAxisPosition = (capStart, capEnd, capValue); + TsChartAxisTick = (catInside, catOutside); + TsChartAxisTicks = set of TsChartAxisTick; TsChartType = (ctEmpty, ctBar, ctLine, ctArea, ctBarLine, ctScatter, ctBubble); TsChartAxis = class(TsChartFillElement) @@ -131,11 +133,11 @@ type FLabelRotation: Integer; FLogarithmic: Boolean; FMajorInterval: Double; - FMajorTickLines: TsChartLine; + FMajorTicks: TsChartAxisTicks; FMax: Double; FMin: Double; FMinorSteps: Double; - FMinorTickLines: TsChartLine; + FMinorTicks: TsChartAxisTicks; FPosition: TsChartAxisPosition; FPositionValue: Double; FShowCaption: Boolean; @@ -158,12 +160,12 @@ type property Logarithmic: Boolean read FLogarithmic write FLogarithmic; property MajorGridLines: TsChartLine read FMajorGridLines write FMajorGridLines; property MajorInterval: Double read FMajorInterval write FMajorInterval; - property MajorTickLines: TsChartLine read FMajorTickLines write FMajorTickLines; + property MajorTicks: TsChartAxisTicks read FMajorTicks write FMajorTicks; property Max: Double read FMax write FMax; property Min: Double read FMin write FMin; property MinorGridLines: TsChartLine read FMinorGridLines write FMinorGridLines; property MinorSteps: Double read FMinorSteps write FMinorSteps; - property MinorTickLines: TsChartLine read FMinorTickLines write FMinorTickLines; + property MinorTicks: TsChartAxisTicks read FMinorTicks write FMinorTicks; property Position: TsChartAxisPosition read FPosition write FPosition; property PositionValue: Double read FPositionValue write FPositionValue; property ShowCaption: Boolean read FShowCaption write FShowCaption; @@ -530,15 +532,8 @@ begin FAxisLine.Style := clsSolid; FAxisLine.Width := PtsToMM(DEFAULT_CHART_LINEWIDTH); - FMajorTickLines := TsChartLine.Create; - FMajorTickLines.Color := scBlack; - FMajorTickLines.Style := clsSolid; - FMajorTickLines.Width := PtsToMM(DEFAULT_CHART_LINEWIDTH); - - FMinorTickLines := TsChartLine.Create; - FMinorTickLines.Color := scBlack; - FMinorTickLines.Style := clsSolid; - FMinorTickLines.Width := PtsToMM(DEFAULT_CHART_LINEWIDTH); + FMajorTicks := [catOutside]; + FMinorTicks := []; FMajorGridLines := TsChartLine.Create; FMajorGridLines.Color := scSilver; @@ -555,8 +550,6 @@ destructor TsChartAxis.Destroy; begin FMinorGridLines.Free; FMajorGridLines.Free; - FMinorTickLines.Free; - FMajorTickLines.Free; FAxisLine.Free; FLabelFont.Free; FCaptionFont.Free; diff --git a/components/fpspreadsheet/source/common/fpsopendocumentchart.pas b/components/fpspreadsheet/source/common/fpsopendocumentchart.pas index 1b8f026b6..056473400 100644 --- a/components/fpspreadsheet/source/common/fpsopendocumentchart.pas +++ b/components/fpspreadsheet/source/common/fpsopendocumentchart.pas @@ -209,6 +209,22 @@ begin if not Axis.AutomaticMinorSteps then chartProps := chartProps + Format('chart:interval-minor-divisor="%d" ', [Axis.MinorSteps]); + case Axis.Position of + capStart: chartProps := chartProps + 'chart:axis-position="start" '; + capEnd: chartProps := chartProps + 'chart:axis-position="end" '; + capValue: chartProps := chartProps + Format('chart:axis-position="%g" ', [Axis.PositionValue], FPointSeparatorSettings); + end; + + if (catInside in Axis.MajorTicks) then + chartProps := chartProps + 'chart:tick-marks-major-inner="true" '; + if (catOutside in Axis.MajorTicks) then + chartProps := chartProps + 'chart:tick-marks-major-outer="true" '; + + if (catInside in Axis.MinorTicks) then + chartProps := chartProps + 'chart:tick-marks-minor-inner="true" '; + if (catOutside in Axis.MinorTicks) then + chartProps := chartProps + 'chart:tick-marks-minor-outer="true" '; + if Axis.Inverted then chartProps := chartProps + 'chart:reverse-direction="true" ';