mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-05-04 09:24:09 +02:00
110 lines
2.4 KiB
ObjectPascal
110 lines
2.4 KiB
ObjectPascal
unit Main;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, ExtCtrls, SysUtils, FileUtil, LResources, Forms, Controls, Graphics,
|
|
Dialogs, TAGraph, TASeries;
|
|
|
|
type
|
|
|
|
{ TForm1 }
|
|
|
|
TForm1 = class(TForm)
|
|
Chart1: TChart;
|
|
Chart1LineSeries1: TLineSeries;
|
|
procedure Chart1LineSeries1GetMark(out AFormattedMark: String;
|
|
AIndex: Integer);
|
|
procedure Chart1MouseDown(
|
|
Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
|
|
procedure Chart1MouseMove(
|
|
Sender: TObject; Shift: TShiftState; X, Y: Integer);
|
|
procedure Chart1MouseUp(
|
|
Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
|
|
procedure FormCreate(Sender: TObject);
|
|
private
|
|
FDragIndex: Integer;
|
|
FNearestIndex: Integer;
|
|
end;
|
|
|
|
var
|
|
Form1: TForm1;
|
|
|
|
implementation
|
|
|
|
{$R *.lfm}
|
|
|
|
uses
|
|
TAChartUtils;
|
|
|
|
type
|
|
TLineSeriesAccess = class(TLineSeries);
|
|
|
|
{ TForm1 }
|
|
|
|
procedure TForm1.Chart1LineSeries1GetMark(
|
|
out AFormattedMark: String; AIndex: Integer);
|
|
begin
|
|
if AIndex = FNearestIndex then
|
|
AFormattedMark := Chart1LineSeries1.FormattedMark(AIndex)
|
|
else
|
|
AFormattedMark := '';
|
|
end;
|
|
|
|
procedure TForm1.Chart1MouseDown(
|
|
Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
|
|
begin
|
|
Unused(Button);
|
|
Unused(X, Y);
|
|
if Shift = [ssShift, ssLeft] then
|
|
FDragIndex := FNearestIndex;
|
|
end;
|
|
|
|
procedure TForm1.Chart1MouseMove(
|
|
Sender: TObject; Shift: TShiftState; X, Y: Integer);
|
|
var
|
|
newNearest: Integer;
|
|
pt, img: TPoint;
|
|
val: TDoublePoint;
|
|
begin
|
|
Unused(Shift);
|
|
pt := Point(X, Y);
|
|
if
|
|
not TLineSeriesAccess(Chart1LineSeries1).
|
|
GetNearestPoint(@PointDist, pt, newNearest, img, val) or
|
|
(PointDist(pt, img) > Sqr(Chart1LineSeries1.Pointer.HorizSize))
|
|
then
|
|
newNearest := -1;
|
|
if newNearest <> FNearestIndex then begin
|
|
FNearestIndex := newNearest;
|
|
Chart1.Invalidate;
|
|
end;
|
|
if FDragIndex < 0 then exit;
|
|
Chart1LineSeries1.SetXValue(FDragIndex, Chart1.XImageToGraph(X));
|
|
Chart1LineSeries1.SetYValue(FDragIndex, Chart1.YImageToGraph(Y));
|
|
end;
|
|
|
|
procedure TForm1.Chart1MouseUp(
|
|
Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
|
|
begin
|
|
Unused(Button, Shift);
|
|
Unused(X, Y);
|
|
FDragIndex := -1;
|
|
end;
|
|
|
|
procedure TForm1.FormCreate(Sender: TObject);
|
|
var
|
|
i: Integer;
|
|
begin
|
|
RandSeed := 675402;
|
|
for i := 1 to 10 do
|
|
Chart1LineSeries1.AddXY(i, Random(20) - 10);
|
|
FDragIndex := -1;
|
|
FNearestIndex := -1;
|
|
end;
|
|
|
|
end.
|
|
|