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前试试teechart.removeallseries方法。我刚试了,还是不行。清除它并不能让Chart恢复原有状态,原有状态各位明白我的意思吧,就是从未装载过任何series,也没有手工修改过任何Chart属性时的状态。
SaveChartDialog(Chart1);装载:
var
tmp : TCustomChart;
begin
With OpenDialog3 do
if Execute then
begin
tmp:=TCustomChart(Chart1);
LoadChartFromFile(tmp,FileName);
Chart1:=TChart(tmp);
LoadChartFromFile(TCustomChart(Chart1),FileName);
end;
end;
TeeJPEG,
TeeGIF,
TeePNG,
TeePCX,
TeePDFCanvas,
TeeSVGCanvas,
TeePSCanvas,
TeeVMLCanvas,
TeeEditPro,
TeExport,
TeeDesignOptions, TeeEditCha, TeeGally, TeeEdit,
TeeTools,
BubbleCh,
TeeXML,
EditChar,
TeeShape;
你把这些都加上吧
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, soFromBeginning);
ObjectBinaryToText(BinStream, StrStream);
StrStream.Seek(0, soFromBeginning);
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, soFromBeginning);
Result := BinStream.ReadComponent(nil); finally
BinStream.Free;
end;
finally
StrStream.Free;
end;
end;我测试了一下:每隔2秒装载一张图,共循环调20次,速度没有多大影响,只是内存占用量比较大,不知各位有没有其它办法降一降。
是否可以用TChart.Assign方法,在程序另外定义一个不可视的chart(设为chart2),每次loadchartFromFile之前,使用chart1.Assign(chart2),把chart2的属性(即初始的属性)赋给chart1。这样的内存占用就只是一个Tchart类的大小吧