mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-09-13 21:19:18 +02:00
TAChart: Add TChartMarks.Clipped property. Update demo.
git-svn-id: trunk@21840 -
This commit is contained in:
parent
d7d5afb621
commit
54485700c3
@ -41,6 +41,7 @@ object Form1: TForm1
|
|||||||
OnMouseMove = Chart1MouseMove
|
OnMouseMove = Chart1MouseMove
|
||||||
OnMouseUp = Chart1MouseUp
|
OnMouseUp = Chart1MouseUp
|
||||||
object Chart1LineSeries1: TLineSeries
|
object Chart1LineSeries1: TLineSeries
|
||||||
|
Marks.Clipped = False
|
||||||
Marks.Format = '%0:g'
|
Marks.Format = '%0:g'
|
||||||
Marks.Style = smsValue
|
Marks.Style = smsValue
|
||||||
OnGetMark = Chart1LineSeries1GetMark
|
OnGetMark = Chart1LineSeries1GetMark
|
||||||
|
@ -14,8 +14,9 @@ LazarusResources.Add('TForm1','FORMDATA',[
|
|||||||
+'ft key'#0#13'Title.Visible'#9#5'Align'#7#8'alClient'#14'DoubleBuffered'#9#11
|
+'ft key'#0#13'Title.Visible'#9#5'Align'#7#8'alClient'#14'DoubleBuffered'#9#11
|
||||||
+'ParentColor'#8#11'OnMouseDown'#7#15'Chart1MouseDown'#11'OnMouseMove'#7#15'C'
|
+'ParentColor'#8#11'OnMouseDown'#7#15'Chart1MouseDown'#11'OnMouseMove'#7#15'C'
|
||||||
+'hart1MouseMove'#9'OnMouseUp'#7#13'Chart1MouseUp'#0#11'TLineSeries'#17'Chart'
|
+'hart1MouseMove'#9'OnMouseUp'#7#13'Chart1MouseUp'#0#11'TLineSeries'#17'Chart'
|
||||||
+'1LineSeries1'#12'Marks.Format'#6#4'%0:g'#11'Marks.Style'#7#8'smsValue'#9'On'
|
+'1LineSeries1'#13'Marks.Clipped'#8#12'Marks.Format'#6#4'%0:g'#11'Marks.Style'
|
||||||
+'GetMark'#7#24'Chart1LineSeries1GetMark'#19'Pointer.Brush.Color'#7#8'clPurpl'
|
+#7#8'smsValue'#9'OnGetMark'#7#24'Chart1LineSeries1GetMark'#19'Pointer.Brush.'
|
||||||
+'e'#17'Pointer.HorizSize'#2#6#13'Pointer.Style'#7#9'psDiamond'#16'Pointer.Ve'
|
+'Color'#7#8'clPurple'#17'Pointer.HorizSize'#2#6#13'Pointer.Style'#7#9'psDiam'
|
||||||
+'rtSize'#2#6#11'SeriesColor'#7#7'clBlack'#10'ShowPoints'#9#0#0#0#0
|
+'ond'#16'Pointer.VertSize'#2#6#11'SeriesColor'#7#7'clBlack'#10'ShowPoints'#9
|
||||||
|
+#0#0#0#0
|
||||||
]);
|
]);
|
||||||
|
@ -70,17 +70,14 @@ begin
|
|||||||
Unused(Shift);
|
Unused(Shift);
|
||||||
pt := Point(X, Y);
|
pt := Point(X, Y);
|
||||||
if
|
if
|
||||||
TLineSeriesAccess(Chart1LineSeries1).
|
not TLineSeriesAccess(Chart1LineSeries1).
|
||||||
GetNearestPoint(@PointDist, pt, newNearest, img, val)
|
GetNearestPoint(@PointDist, pt, newNearest, img, val) or
|
||||||
then begin
|
(PointDist(pt, img) > Sqr(Chart1LineSeries1.Pointer.HorizSize))
|
||||||
if PointDist(pt, img) <= Sqr(Chart1LineSeries1.Pointer.HorizSize) then begin
|
then
|
||||||
if newNearest <> FNearestIndex then begin
|
newNearest := -1;
|
||||||
FNearestIndex := newNearest;
|
if newNearest <> FNearestIndex then begin
|
||||||
Chart1.Invalidate;
|
FNearestIndex := newNearest;
|
||||||
end;
|
Chart1.Invalidate;
|
||||||
end
|
|
||||||
else
|
|
||||||
FNearestIndex := -1;
|
|
||||||
end;
|
end;
|
||||||
if FDragIndex < 0 then exit;
|
if FDragIndex < 0 then exit;
|
||||||
Chart1LineSeries1.SetXValue(FDragIndex, Chart1.XImageToGraph(X));
|
Chart1LineSeries1.SetXValue(FDragIndex, Chart1.XImageToGraph(X));
|
||||||
|
@ -270,6 +270,7 @@ type
|
|||||||
|
|
||||||
TChartMarks = class(TChartElement)
|
TChartMarks = class(TChartElement)
|
||||||
private
|
private
|
||||||
|
FClipped: Boolean;
|
||||||
FDistance: Integer;
|
FDistance: Integer;
|
||||||
FFormat: String;
|
FFormat: String;
|
||||||
FFrame: TChartPen;
|
FFrame: TChartPen;
|
||||||
@ -278,6 +279,7 @@ type
|
|||||||
FLinkPen: TChartLinkPen;
|
FLinkPen: TChartLinkPen;
|
||||||
FStyle: TSeriesMarksStyle;
|
FStyle: TSeriesMarksStyle;
|
||||||
|
|
||||||
|
procedure SetClipped(const AValue: Boolean);
|
||||||
procedure SetDistance(const AValue: Integer);
|
procedure SetDistance(const AValue: Integer);
|
||||||
procedure SetFormat(const AValue: String);
|
procedure SetFormat(const AValue: String);
|
||||||
procedure SetFrame(const AValue: TChartPen);
|
procedure SetFrame(const AValue: TChartPen);
|
||||||
@ -294,6 +296,8 @@ type
|
|||||||
ACanvas: TCanvas; const ALabelRect: TRect; const AText: String);
|
ACanvas: TCanvas; const ALabelRect: TRect; const AText: String);
|
||||||
function IsMarkLabelsVisible: Boolean;
|
function IsMarkLabelsVisible: Boolean;
|
||||||
published
|
published
|
||||||
|
// If false, labels may overlap axises and legend.
|
||||||
|
property Clipped: Boolean read FClipped write SetClipped default true;
|
||||||
// Distance between series point and label.
|
// Distance between series point and label.
|
||||||
property Distance: Integer
|
property Distance: Integer
|
||||||
read FDistance write SetDistance default DEF_MARKS_DISTANCE;
|
read FDistance write SetDistance default DEF_MARKS_DISTANCE;
|
||||||
@ -988,6 +992,7 @@ end;
|
|||||||
constructor TChartMarks.Create(AOwner: TCustomChart);
|
constructor TChartMarks.Create(AOwner: TCustomChart);
|
||||||
begin
|
begin
|
||||||
inherited Create(AOwner);
|
inherited Create(AOwner);
|
||||||
|
FClipped := true;
|
||||||
FDistance := DEF_MARKS_DISTANCE;
|
FDistance := DEF_MARKS_DISTANCE;
|
||||||
InitHelper(TFPCanvasHelper(FFrame), TChartPen);
|
InitHelper(TFPCanvasHelper(FFrame), TChartPen);
|
||||||
InitHelper(TFPCanvasHelper(FLabelBrush), TChartLabelBrush);
|
InitHelper(TFPCanvasHelper(FLabelBrush), TChartLabelBrush);
|
||||||
@ -1010,13 +1015,21 @@ end;
|
|||||||
|
|
||||||
procedure TChartMarks.DrawLabel(
|
procedure TChartMarks.DrawLabel(
|
||||||
ACanvas: TCanvas; const ALabelRect: TRect; const AText: String);
|
ACanvas: TCanvas; const ALabelRect: TRect; const AText: String);
|
||||||
|
var
|
||||||
|
wasClipping: Boolean = false;
|
||||||
begin
|
begin
|
||||||
|
if not Clipped and ACanvas.Clipping then begin
|
||||||
|
ACanvas.Clipping := false;
|
||||||
|
wasClipping := true;
|
||||||
|
end;
|
||||||
ACanvas.Brush.Assign(LabelBrush);
|
ACanvas.Brush.Assign(LabelBrush);
|
||||||
ACanvas.Pen.Assign(Frame);
|
ACanvas.Pen.Assign(Frame);
|
||||||
ACanvas.Rectangle(ALabelRect);
|
ACanvas.Rectangle(ALabelRect);
|
||||||
ACanvas.Font.Assign(LabelFont);
|
ACanvas.Font.Assign(LabelFont);
|
||||||
ACanvas.TextOut(
|
ACanvas.TextOut(
|
||||||
ALabelRect.Left + MARKS_MARGIN_X, ALabelRect.Top + MARKS_MARGIN_Y, AText);
|
ALabelRect.Left + MARKS_MARGIN_X, ALabelRect.Top + MARKS_MARGIN_Y, AText);
|
||||||
|
if wasClipping then
|
||||||
|
ACanvas.Clipping := true;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TChartMarks.IsMarkLabelsVisible: Boolean;
|
function TChartMarks.IsMarkLabelsVisible: Boolean;
|
||||||
@ -1024,6 +1037,13 @@ begin
|
|||||||
Result := Visible and (Style <> smsNone) and (Format <> '');
|
Result := Visible and (Style <> smsNone) and (Format <> '');
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TChartMarks.SetClipped(const AValue: Boolean);
|
||||||
|
begin
|
||||||
|
if FClipped = AValue then exit;
|
||||||
|
FClipped := AValue;
|
||||||
|
StyleChanged(Self);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TChartMarks.SetDistance(const AValue: Integer);
|
procedure TChartMarks.SetDistance(const AValue: Integer);
|
||||||
begin
|
begin
|
||||||
if FDistance = AValue then exit;
|
if FDistance = AValue then exit;
|
||||||
|
Loading…
Reference in New Issue
Block a user