Teechart问题(200分)

  • 主题发起人 主题发起人 hxg
  • 开始时间 开始时间
H

hxg

Unregistered / Unconfirmed
GUEST, unregistred user!
如何在Teechart-Lines下实现类似股票软件的以下功能:
1、在x数据较多和较少时,如何实现x坐标的距离不变,并在
数据较多,用滚动条滚动显示;
2、当鼠标在Teechart上停留或单击是,在x(如日期)坐标
上画一道竖线,并显示对应的数值(x(如日期),y(如销售量));
 
1.可以设定startposition和endposition,在bottomaxis中设置
2.没试过,可不可以用划线的方式!我在试试~
 
对问题1:在滚动条滚动时改变Chart1.LeftAxis的属性值,同时在Chart1Scroll,
Chart1Zoom,Chart1UndoZoom,Chart1Resize等事件中刷新滚动条的位置
procedure TScrollBarForm.ScrollBar2Change(Sender: TObject);
Var Difer:Double;
begin
if not ChangingBars then
With Chart1.LeftAxisdo
begin
Difer:=Maximum-Minimum;
Minimum:=Chart1.MinYValue(Chart1.LeftAxis)+ScrollBar2.Position*Difer/100.0;
Maximum:=Minimum+Difer;
end;
end;
对问题2:可在增加一个画线函数,并在Chart1MouseMove中处理在LABEL上指示当前坐标值
Procedure TForm1.DrawCross(AX,AY:Integer);
begin
//画光标指示线,SGDB为FALSE画单线,为TRUE画双线
IF NOT SGDB then
begin
With Chart1,Canvasdo
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
else
begin
With Chart1,Canvasdo
begin
Pen.Color:=CrossHairColor;
//枚举类型 TPenStyle = (psSolid, psDash, psDot, psDashDot,
// psDashDotDot, psClear,psInsideFrame);
Pen.Style:=psDot;//定义线为点画线
Pen.Mode:=pmXor;
Pen.Width:=1;
//两根竖线
MoveTo(ax-30,ChartRect.Top-Height3D);
LineTo(ax-30,ChartRect.Bottom-Height3D);
MoveTo(ax+30,ChartRect.Top-Height3D);
LineTo(ax+30,ChartRect.Bottom-Height3D);
//横线
Pen.Style:=psSolid;
MoveTo(ChartRect.Left+Width3D,ay);
LineTo(ChartRect.Right+Width3D,ay);
end;
END
end;
procedure TForm1.Chart1MouseMove(Sender: TObject;
Shift: TShiftState;
X,
Y: Integer);
//CHART图表上移动鼠标,则调用DRAWCROSS画线,同时
Var tmpX,tmpY:Double;
//在LABEL上指示光标点的位置
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
DrawCross(x,y);
{ draw crosshair at current position }
{ store old position }
OldX:=x;
OldY:=y;
{ set label text }
With LineSeries1do
begin
GetCursorValues(tmpX,tmpY);
{ <-- get values under mouse cursor }
curorvalx:=tmpX;
//光标的坐标值保存在全局变量
curorvaly:=tmpY;
Label1.Caption:=GetVertAxis.LabelValue(tmpY)+
' '+
GetHorizAxis.LabelValue(tmpX);
end;
end;
end;
 
我也想知道,我用的是Teechart5.0 pro for Delphi。
 
对于第一个问题,Teechart5.0 pro for Delphi已经很好的解决了,右击TDBChart,
点Edit Chart,面板中选General,选Scroll页面,可以设定是纵向滚动还是横向滚动
或两者都滚动。
 
强制结束,请自行验证!
 
后退
顶部