home *** CD-ROM | disk | FTP | other *** search
/ PC Expert 29 / Pce29cd.iso / RUNIMAGE / DELPHI40 / DEMOS / TEECHART / UCROSSH.PAS < prev    next >
Pascal/Delphi Source File  |  1998-06-16  |  3KB  |  119 lines

  1. {*********************************************}
  2. { TeeChart Delphi Component Library           }
  3. { Cross-Hair demo                             }
  4. { Copyright (c) 1995-1996 by David Berneda    }
  5. { All rights reserved                         }
  6. {*********************************************}
  7. unit Ucrossh;
  8.  
  9. interface
  10.  
  11. uses
  12.   SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  13.   Forms, Dialogs, StdCtrls, Teengine, Series, ExtCtrls, Chart, Buttons,
  14.   TeeProcs;
  15.  
  16. type
  17.   TCrossHairForm = class(TForm)
  18.     Chart1: TChart;
  19.     LineSeries1: TLineSeries;
  20.     Panel1: TPanel;
  21.     Label1: TLabel;
  22.     BitBtn1: TBitBtn;
  23.     Label2: TLabel;
  24.     CheckBox1: TCheckBox;
  25.     BitBtn2: TBitBtn;
  26.     Memo1: TMemo;
  27.     procedure FormCreate(Sender: TObject);
  28.     procedure Chart1MouseMove(Sender: TObject; Shift: TShiftState; X,
  29.       Y: Integer);
  30.     procedure LineSeries1AfterDrawValues(Sender: TObject);
  31.     procedure CheckBox1Click(Sender: TObject);
  32.     procedure BitBtn2Click(Sender: TObject);
  33.   private
  34.     { Private declarations }
  35.   public
  36.     { Public declarations }
  37.     OldX,OldY:Longint;
  38.     CrossHairColor:TColor;
  39.     CrossHairStyle:TPenStyle;
  40.   end;
  41.  
  42. implementation
  43.  
  44. {$R *.DFM}
  45. Uses udemutil;
  46.  
  47. procedure TCrossHairForm.FormCreate(Sender: TObject);
  48. begin
  49.   LineSeries1.FillSampleValues(30);  { <-- some random values }
  50.   OldX:=-1;                          { initialize variables }
  51.   CrossHairColor:=clYellow;
  52.   CrossHairStyle:=psSolid;
  53. end;
  54.  
  55. procedure TCrossHairForm.Chart1MouseMove(Sender: TObject; Shift: TShiftState; X,
  56.   Y: Integer);
  57.  
  58.   { This procedure draws the crosshair lines }
  59.   Procedure DrawCross(AX,AY:Integer);
  60.   begin
  61.     With Chart1,Canvas do
  62.     begin
  63.       Pen.Color:=CrossHairColor;
  64.       Pen.Style:=CrossHairStyle;
  65.       Pen.Mode:=pmXor;
  66.       Pen.Width:=1;
  67.       MoveTo(ax,ChartRect.Top-Height3D);
  68.       LineTo(ax,ChartRect.Bottom-Height3D);
  69.       MoveTo(ChartRect.Left+Width3D,ay);
  70.       LineTo(ChartRect.Right+Width3D,ay);
  71.     end;
  72.   end;
  73.  
  74. Var tmpX,tmpY:Double;
  75. begin
  76.   if (OldX<>-1) then
  77.   begin
  78.     DrawCross(OldX,OldY);  { draw old crosshair }
  79.     OldX:=-1;
  80.   end;
  81.  
  82.   { check if mouse is inside Chart rectangle }
  83.   if PtInRect( Chart1.ChartRect, Point(X-Chart1.Width3D,Y+Chart1.Height3D)  ) then
  84.   begin
  85.     DrawCross(x,y);  { draw crosshair at current position }
  86.     { store old position }
  87.     OldX:=x;
  88.     OldY:=y;
  89.     { set label text }
  90.     With LineSeries1 do
  91.     begin
  92.       GetCursorValues(tmpX,tmpY);  { <-- get values under mouse cursor }
  93.       Label1.Caption:=GetVertAxis.LabelValue(tmpY)+
  94.                       ' '+
  95.                       GetHorizAxis.LabelValue(tmpX);
  96.     end;
  97.   end;
  98. end;
  99.  
  100. procedure TCrossHairForm.LineSeries1AfterDrawValues(Sender: TObject);
  101. begin
  102.   OldX:=-1;  { Reset old mouse position }
  103. end;
  104.  
  105. procedure TCrossHairForm.CheckBox1Click(Sender: TObject);
  106. begin
  107.   if CheckBox1.Checked then Chart1.Cursor:=crCross
  108.                        else Chart1.Cursor:=crDefault;
  109.   Chart1.OriginalCursor:=Chart1.Cursor;
  110. end;
  111.  
  112. procedure TCrossHairForm.BitBtn2Click(Sender: TObject);
  113. begin
  114.   CrossHairColor:=EditColor(Self,CrossHairColor);
  115. end;
  116.  
  117.  
  118. end.
  119.