Teechart7中取点的坐标值的问题 ( 积分: 100 )

  • 主题发起人 主题发起人 至尊王
  • 开始时间 开始时间

至尊王

Unregistered / Unconfirmed
GUEST, unregistred user!
[red]Teechart7[/red]中取点的坐标值的问题?
我在TCHART控件上动态画了几条曲线,当我用(TCursorTool)鼠标移动时会有一条十字线随鼠标移动;同时要在一个LABEL控件上显示横坐标及对应此横坐标的几条曲线的纵坐标值,应该怎样做?
用GetCursorValues()很容易得到横坐标的值,但相应的纵坐标值不知怎样得到?请各位高手指点,
不甚感谢!
 
[red]Teechart7[/red]中取点的坐标值的问题?
我在TCHART控件上动态画了几条曲线,当我用(TCursorTool)鼠标移动时会有一条十字线随鼠标移动;同时要在一个LABEL控件上显示横坐标及对应此横坐标的几条曲线的纵坐标值,应该怎样做?
用GetCursorValues()很容易得到横坐标的值,但相应的纵坐标值不知怎样得到?请各位高手指点,
不甚感谢!
 
GetCursorValues(),横纵坐标都可以得到啊!!!?怎么会只有横坐标呢?
 
我要[red]对应此横坐标的几条曲线的纵坐标值[/red]
[blue](要得到鼠标当前位置纵坐标的值很容易)
GetCursorValues(tmpX,tmpY);

Label1.Caption:=GetVertAxis.LabelValue(tmpY)+' '+
GetHorizAxis.LabelValue(tmpX);
这样得到的仅是鼠标当前位置横坐标与纵坐标,我要的是横坐标这条竖线与曲线交点
处的纵坐标得值[/blue]
 
不要意思, 我從來沒有用過TeeChart控件~
但是你想知道當前的mouse 位置, 可以用GetCursorPos 函數就可以得到X, Y 座標的值了.
需要獲取幾個點的值都可以, 你用程式控制一下就可以了.
 
很简单
在TCursorTool的OnChange事件中可以获取
Change(Sender: TCursorTool;
x,
y: Integer;
const XValue, YValue:do
uble;
Series: TChartSeries;
ValueIndex: Integer);
 
to yostgxf
如何获取?
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2447565
关于Chart的问题:怎样获得辅助线与折线相交的y轴值!
 
收藏,正好作这个呢 [8D]
 
to app2001:
不行!
 
1.一个TCursorTool工具同时只能对应一条Series
2.在TCursorTool的OnChange事件中(Sender: TCursorTool;
x,
y: Integer;
const XValue, YValue:do
uble;
Series: TChartSeries;
ValueIndex: Integer);
XValue, YValue就是你需要的值
3.另外的 Series通过ValueIndex获取
我讲明白了吗?
还有一个问题就是希望你问题解决了早点结帖
 
那苯办法用一个数组来记录画的坐标点,再来查询!不知道可行不?
 
在TChart的MouseMove事件中写
procedure TForm1.Chart1MouseMove(Sender: TObject;
Shift: TShiftState;
X,
Y: Integer);
begin
label1.Caption:=inttostr(x)+' , '+inttostr(y);
end;
 
帮人帮到底,给你做了个例子,我试过的哦
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, TeEngine, Series, ExtCtrls, TeeProcs, Chart, TeeTools;
type
TForm1 = class(TForm)
Chart1: TChart;
Series1: TFastLineSeries;
Series2: TFastLineSeries;
Series3: TFastLineSeries;
Series4: TFastLineSeries;
Button1: TButton;
ChartTool1: TCursorTool;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
procedure FormCreate(Sender: TObject);
procedure ChartTool1Change(Sender: TCursorTool;
x, y: Integer;
const XValue, YValue:do
uble;
Series: TChartSeries;
ValueIndex: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Chart1.SeriesList.FillSampleValues(100);
end;

procedure TForm1.ChartTool1Change(Sender: TCursorTool;
x, y: Integer;
const XValue, YValue:do
uble;
Series: TChartSeries;
ValueIndex: Integer);
begin
Label1.Caption := FloatToStrF(XValue, ffNumber, 11, 6);
Label2.Caption := FloatToStrF(YValue, ffNumber, 11, 6);
Label3.Caption := FloatToStrF(Series1.YValue[ValueIndex], ffNumber, 11, 6);
//同Label2
Label4.Caption := FloatToStrF(Series2.YValue[ValueIndex], ffNumber, 11, 6);
Label5.Caption := FloatToStrF(Series3.YValue[ValueIndex], ffNumber, 11, 6);
Label6.Caption := FloatToStrF(Series4.YValue[ValueIndex], ffNumber, 11, 6);
end;
 
to yostgxf:
[red]不对!XXX.YValue[ValueIndex], 得到的值永远是:2.12199579096577E-311[/red]
 
我专门做了个小例子贴上去了,都测试过的,没问题
你的XXX.YValue[ValueIndex的ValueIndex怎么取的?XXX有值吗?
 
不管我如何画线,ValueIndex总是为[red]-1[/red]!
 
至尊王, 把你的代碼貼出來吧, 這樣容易幫你修改~
 
你的工具有没有关联Series?在设计的时候可以设计
也可以用代码
ChartTool1.Series :=Series1
 
procedure TForm4.DBChart1MouseMove(Sender: TObject;
Shift: TShiftState;
X,
Y: Integer);
Procedure DrawCross(AX,AY:Integer);
//划十字线
begin

With DBChart1,Canvasdo
begin
Pen.Color:=clRed;
// 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;
Temp:Tcomponent;
i:integer;
begin
Timer1.Enabled:=false;
if listxy.Visible =true then
listxy.visible:=false;
Timer1.Enabled :=true;
if (OldX<>-1) then
begin
if butlistLine.Caption ='YES' then
DrawCross(OldX,OldY);
{ draw old crosshair }
OldX:=-1;
end;

{ check if mouse is inside Chart rectangle }
if PtInRect( DBChart1.ChartRect, Point(X-DBChart1.Width3d,Y+DBChart1.height3d)) then
begin
if butListLine.Caption ='YES' then
DrawCross(x,y);
{ draw crosshair at current position }
{ store old position }
OldX:=x;
OldY:=y;
{ set label text }
for i:=ComponentCount-1do
wnto 0do
begin
Temp:=components;
if (temp is TFastLineSeries) then
begin
With (temp as TfastLineseries)do
begin
GetCursorValues(tmpX,tmpY);
{ <-- get values under mouse cursor }
LabY.Caption:=GetVertAxis.LabelValue(tmpY);
labX.caption:=GetHorizAxis.LabelValue(tmpX);


end;
exit;
end;
end;
end;

end;
 
后退
顶部