home *** CD-ROM | disk | FTP | other *** search
- unit unear;
-
- interface
-
- { This example includes a function to calculate the nearest point
- in a Series to the mouse pointer.
- }
- uses
- Wintypes,WinProcs, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- ExtCtrls, TeeProcs, TeEngine, Chart, Series, StdCtrls;
-
- type
- TClickNearForm = class(TForm)
- Chart1: TChart;
- Series1: TLineSeries;
- LabelX: TLabel;
- LabelY: TLabel;
- LabelNear: TLabel;
- Button1: TButton;
- Label4: TLabel;
- Label5: TLabel;
- Label6: TLabel;
- procedure FormCreate(Sender: TObject);
- procedure Chart1MouseMove(Sender: TObject; Shift: TShiftState; X,
- Y: Integer);
- procedure Button1Click(Sender: TObject);
- procedure Chart1AfterDraw(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- Mouse:TPoint;
- NearestPoint:Integer;
- end;
-
- var
- ClickNearForm: TClickNearForm;
-
- implementation
-
- {$R *.DFM}
-
- Function GetNearestPoint( ASeries:TChartSeries; Mouse:TPoint):Integer;
- var t,Dif,Dist,x,y :Integer;
- begin
- result:=-1;
- Dif:=10000;
- for t:=0 to ASeries.Count-1 do { <-- traverse all points in a Series... }
- begin
- { calculate each point xy coordinates relative to mouse }
- x:=Abs( Mouse.X-ASeries.CalcXPos(t) );
- y:=Abs( Mouse.Y-ASeries.CalcYPos(t) );
-
- { calculate distance in pixels... }
- Dist:=Round(sqrt(1.0*x*x+1.0*y*y));
-
- { store if distance is lower... }
- if Dist<Dif then
- begin
- Dif:=Dist;
- result:=t; { <-- set this point to be the nearest... }
- end;
- end;
- end;
-
- procedure TClickNearForm.Chart1MouseMove(Sender: TObject; Shift: TShiftState; X,
- Y: Integer);
- begin
- Mouse.x:=x;
- Mouse.y:=y;
- LabelX.Caption:=IntToStr(Mouse.x);
- LabelY.Caption:=IntToStr(Mouse.y);
- NearestPoint:=GetNearestPoint(Series1,Mouse);
- LabelNear.Caption:=IntToStr( NearestPoint );
- Chart1.Repaint;
- end;
-
- procedure TClickNearForm.FormCreate(Sender: TObject);
- begin
- Series1.FillSampleValues(8);
- end;
-
- procedure TClickNearForm.Button1Click(Sender: TObject);
- begin
- Close;
- end;
-
- procedure TClickNearForm.Chart1AfterDraw(Sender: TObject);
- var x,y:Integer;
- begin
- if NearestPoint<>-1 then
- With Chart1.Canvas do
- begin
- Pen.Style:=psDot;
- Pen.Color:=clWhite;
- Pen.Width:=1;
-
- x:=Series1.CalcXPos(NearestPoint);
- y:=Series1.CalcYPos(NearestPoint);
-
- Brush.Style:=bsClear;
- Ellipse(x-20,y-20,x+20,y+20);
-
- Pen.Style:=psSolid;
- MoveTo(Mouse.X,Mouse.Y);
- LineTo(x,y);
- end;
- end;
-
- end.
-