teeChart 如何实现初始化状态 ( 积分: 200 )

  • 主题发起人 主题发起人 panys
  • 开始时间 开始时间
P

panys

Unregistered / Unconfirmed
GUEST, unregistred user!
teeChart 如何实现初始化状态
[:)][:)]
现有一个teeChart与两个Series (A,B),Series通过外部程序画好存成tee格式文件,传给teeChart装载Load tee,Series A的特点是横坐标的值是从大到小,Series B与A正好相反。
现在我遇到的问题是:若是第一个装载的Series,结果正确,即横坐标的值该从大到小的从大到小,该从小到大的从小到大。但若是第二个装载的Series,结果就不正确,经发现它是保留了第一个装载的Series横坐标的值的大小顺序。
细想一下,可能是这样的:若你的Series本身设置了某个teeChart中Chart属性(如横坐标的值的大小顺序),且teeChart的Chart属性没有被修改过(即没有装载过Series),系统则采用Series本身设置的。一旦装载过Series,即意味着Chart被污染了,下次再装载Series,则不会采用Series的属性,而是沿用上次的状态。
寻求解决方法:Chart有没有一个让其本身恢复初始状态的方法。当然你可能会问:你就在每次装载前手工地设置一下坐标方向不就可以了,但是不行,因为一我不知道要装载Series坐标情况,二不仅是坐标有变动,其它很多属性都有变动,做一个过程一一设置成初始值实在不是一个好方法。
谢谢
 
teeChart 如何实现初始化状态
[:)][:)]
现有一个teeChart与两个Series (A,B),Series通过外部程序画好存成tee格式文件,传给teeChart装载Load tee,Series A的特点是横坐标的值是从大到小,Series B与A正好相反。
现在我遇到的问题是:若是第一个装载的Series,结果正确,即横坐标的值该从大到小的从大到小,该从小到大的从小到大。但若是第二个装载的Series,结果就不正确,经发现它是保留了第一个装载的Series横坐标的值的大小顺序。
细想一下,可能是这样的:若你的Series本身设置了某个teeChart中Chart属性(如横坐标的值的大小顺序),且teeChart的Chart属性没有被修改过(即没有装载过Series),系统则采用Series本身设置的。一旦装载过Series,即意味着Chart被污染了,下次再装载Series,则不会采用Series的属性,而是沿用上次的状态。
寻求解决方法:Chart有没有一个让其本身恢复初始状态的方法。当然你可能会问:你就在每次装载前手工地设置一下坐标方向不就可以了,但是不行,因为一我不知道要装载Series坐标情况,二不仅是坐标有变动,其它很多属性都有变动,做一个过程一一设置成初始值实在不是一个好方法。
谢谢
 
建议你再测试一下,如果先装载入第二个series,然后再装载入第一个,看看效果是什么,如果这时候保持坐标由大到小,那说明你发现的问题了。
 
正如你所说:是保持坐标由大到小。但你再次装载入第二个series时,还是由大到小,这就不对了啊。
 
先:
Chart1.SeriesList.Clear;
//回到初始状态
后:
再装载
 
To NineSky:
我刚试了,还是不行。
清除它并不能让Chart恢复原有状态,感觉要从Chart上考虑,而不是Series。原有状态各位明白我的意思吧,就是从未装载过任何series,也没有手工修改过任何Chart属性时的状态。
 
都明白你的意思了,那就看看chart上是不是提供了相关的函数来处理这个情况了!
 
找到解决问题的方法了,就是先把Chart属性值写到WriteComponent一个变量中,装载前再用这个变量恢复一下。
function TForm1.ComponentToString(Component: TComponent): string;
var
BinStream:TMemoryStream;
StrStream: TStringStream;
s: string;
begin
BinStream := TMemoryStream.Create;
try
StrStream := TStringStream.Create(s);
try
BinStream.WriteComponent(Component);
BinStream.Seek(0, soFrombegin
ning);
ObjectBinaryToText(BinStream, StrStream);
StrStream.Seek(0, soFrombegin
ning);
Result:= StrStream.DataString;
finally
StrStream.Free;

end;
finally
BinStream.Free
end;
end;

function TForm1.StringToComponent(Value: string): TComponent;
var
StrStream:TStringStream;
BinStream: TMemoryStream;
begin
StrStream := TStringStream.Create(Value);
try
BinStream := TMemoryStream.Create;
try
ObjectTextToBinary(StrStream, BinStream);
BinStream.Seek(0, soFrombegin
ning);
Result := BinStream.ReadComponent(nil);
finally
BinStream.Free;
end;
finally
StrStream.Free;
end;
end;

我测试了一下:每隔2秒装载一张图,共循环调20次,速度没有多大影响,只是内存占用量比较大,不知各位有没有其它办法降一降。
 
想在网络赚钱上吗?“免费使用,有偿回报”只要联网,就可赚钱,无需任何投入。注
册地址:
http://www.8qu.net/register.asp?net=thor
你也许错过了网络初期的赚钱机会,这次你一定不可以再错过!
看新闻,赚现金!无须点击广告,不必投入1分钱!
点击这里,免费注册http://www.sohoads.com/sabar/reg.asp?sj=thor
 
后退
顶部