moonrise

Advanced Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору итоговый. РАБОЧИЙ вариант Код: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, TeEngine, Series, ExtCtrls, TeeProcs, Chart; type TForm1 = class(TForm) Chart1: TChart; Series1: TFastLineSeries; procedure FormCreate(Sender: TObject); procedure Chart1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure Series1AfterDrawValues(Sender: TObject); private { Private declarations } public { Public declarations } OldX,OldY:Longint; CrossHairColor:TColor; CrossHairStyle:TPenStyle; end; var Form1: TForm1; eps :real; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var I: Integer; begin for I := 0 to 100 do // Iterate begin Form1.Series1.AddXY(i,Random(100)); end; // for OldX:=-1; { initialize variables } CrossHairColor:=clYellow; CrossHairStyle:=psSolid; eps := abs((Form1.Series1.XValues[2]-Form1.Series1.XValues[1])/2); end; procedure TForm1.Chart1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); { This procedure draws the crosshair lines } Procedure DrawCross(AX,AY:Integer); begin With Chart1,Canvas do begin Pen.Color:=CrossHairColor; Pen.Style:=CrossHairStyle; Pen.Mode:=pmXor; Pen.Width:=1; MoveTo(ax,ChartRect.Top-Height3D); LineTo(ax,ChartRect.Bottom-Height3D); MoveTo(ChartRect.Left+Width3D,ay); LineTo(ChartRect.Right+Width3D,ay); end; end; Var tmpX,tmpY:Double; i: Integer; begin if (OldX<>-1) then begin DrawCross(OldX,OldY); { draw old crosshair } OldX:=-1; end; { check if mouse is inside Chart rectangle } if PtInRect( Chart1.ChartRect, Point(X-Chart1.Width3D,Y+Chart1.Height3D) ) then begin { set label text } With Series1 do begin GetCursorValues(tmpX,tmpY); { <-- get values under mouse cursor } i:= 0; while ((XValue[i]-tmpX) < eps) do begin i:=i+1; end; // while Form1.Caption:=FloatToStr(XValue[i])+ ' |'+ FloatToStr(YValue[i]) ; DrawCross(Series1.CalcXPos(i),Series1.CalcYPos(i)); { draw crosshair at current position } end; { store old position } OldX:=Series1.CalcXPos(i); OldY:=Series1.CalcYPos(i); end; end; procedure TForm1.Series1AfterDrawValues(Sender: TObject); begin OldX:=-1; { Reset old mouse position } end; end. | Добавлено: PS скорее всего перекрестие надо рисовать не по i, а по i-1
---------- Истина внимательно выслушивает спорящих... вздыхает и уходит. |
| Всего записей: 1987 | Зарегистр. 19-09-2001 | Отправлено: 02:20 19-02-2005 | Исправлено: moonrise, 03:14 19-02-2005 |
|