TeeChart的一个大问题(100分)

  • 主题发起人 主题发起人 Kofer
  • 开始时间 开始时间
K

Kofer

Unregistered / Unconfirmed
GUEST, unregistred user!
我用barseries来显示条型图,其Y轴和X轴的值分别对应数据库里的一个浮点数值字段和
一个日期字段,现在遇到一个问题,如果数据库里的日期少一天,图形显示出来就会有
个空缺,很难看,比如2001-05-01接下来的数据只有2001-05-10的,中间就会缺一大段
。把X轴设为非日期型虽然可以解决这个问题,但是GetCursorValues,XScreenTovalue,
CalcPosPoint等函数计算出来的屏幕坐标到X轴的值就不对了,怎么解决这个问题啊。
 
哈哈!我也遇到同样问题,解决办法是:
1、填充数值的时候,给横坐标赋模拟的、连续的日期值,同时自己保存真实的日期;
2、自己显示(Draw)横坐标的label内容。

比如你的数据是:
2001-01-01,100
2001-01-10,200
2001-01-11,300

那么你给TeeChart赋值的时候用2001-01-01,2001-01-02,2001-01-03。。。之类的
连续的日期(当然是随便什么日期都可以),目的是为了让TeeChart这个笨猪显示
连续的图形,然后你再自己设置横坐标显示的文本就可了
 
Teechart的官方网站的FAQ是建议这样解决的:
How can I remove weekends on Candle OHLC database Charts?

Don't select the "Date" field in the database datasource tab for the Candle Series. This will assign a different X value for each point (instead of the candle datetime value):

1,2,3,4,5,6.....

To set your date labels, select your table "Date" field in the "Labels" combobox in the datasource tab.

DELPHI CODE :

Series1.XValues.ValueSource:=''; { <--- no X coordinate }
Series1.XLabelsSource:="MyDate" ;
Series1.OpenValues.ValuesSource:="Open" ;
Series1.CloseValues.ValuesSource:="Close" ;
Series1.HighValues.ValuesSource:="High" ;
Series1.LowValues.ValuesSource:="Low" ;
Series1.DataSource:=Table1

但是也是无法解决GetCursorValues,XScreenTovalue,CalcPosPoint的问题。
过客兄的方法虽然可行,但是数据多了速度影响会很大啊。


 
"remove weekends"和你的问题根本不是一回事,听我的没错,这个问题我前段时间研究很久了。

>>但是数据多了速度影响会很大啊
我想你每次(屏)不会显示很多数据吧?影响不会很大的
 
自己显示(Draw)横坐标的label内容,怎么做???
 
男儿有志当凌云上有TeeChart.Pro.v5.02.Full.Source.Delphi456.CBuilder45.Kylix ,
可是要成为会员,那要求500元每年。不知道有没有免费的下载。
 
常大鹏:那个东西我有,问题依旧。

>>自己显示(Draw)横坐标的label内容,怎么做???
记不清了,大概是 series1.YLabels.value[0]:='2001-09-10'
 
一个过客:
能给我发一份吗?
我的邮箱是changdapeng@163.net,如果比较大的话请发送到changdapeng1993@sohu.com
谢了。
 
哈哈,成功了,bluely的方法果然简便可行.
 
这个问题其实容易解决,无须那么麻烦啊.就是不要用日期型,把原来是日期型的字段改成整型
,比如2001-05-01就改成整型数20010501,他的图形自然就连续了.GetCursorValues取到的鼠标
数虽然不是已经转换好的数值,但是经过仔细观测,其实就是valueindex,只不过他很精确,是个
浮点数而已,你只要这样就能得到x轴真正的值了:
GetcursorValues(Tx,Ty);
Label1.Caption := GetVertAxis.LabelValue(tmpY);{Y轴的值}
label2.caption := Xlabel[round(Tx)];{X轴实际值}
取到的值绝对是正确的,不信你试试.

 
后退
顶部