关于chart的简单问题(40分)

  • 主题发起人 主题发起人 虾米
  • 开始时间 开始时间

虾米

Unregistered / Unconfirmed
GUEST, unregistred user!
我做了以下程序:
想动态的添加chart的series,
var
m1:tchartseries ;
begin
m1:=tchartseries.Create(achart) ;
m1:=achart.GetASeries ;
****m1.Clear ;
。。。。。
m1.title:=dm.Query.fieldbyname('name').asstring ;
m1.Active :=true ;
achart.add(m1) ;
m1.free ;

问题:
1。在打**号处出错,
2。achart并没有add上series

另付20分
谁有能够在程序运行期间方便修改内容的报表和图形控件??
(report和tchart)







 
这段程序问题很多。
1。如果chart中已无曲线时清除曲线当然要报错。可以加个判断。
2。不能画图的原因是 -- 你用的Tchartseries是个抽象类。应该用其子类,如TLlineseries等。
我的代码如下。(已调试通过)
var
Form1: TForm1;
Series2: TlineSeries;
implementation

{$R *.DFM}

procedure TForm1.BitBtn1Click(Sender: TObject);

begin
Series2 := TlineSeries.Create(chart1);
series2.ParentChart := chart1 ;
Series2 := TlineSeries( chart1.GetASeries ) ;
if series2 <> nil then
begin
series2.Clear ;
showmessage('cleared');
end
else showmessage('no series present');
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
var i : word ;
begin
Series2.Title := 'abc';
for i := 1 to 100 do
Series2.AddXY(i,sin(i/100),'',clred);
chart1.AddSeries (series2);
series2.ParentChart := chart1 ;
end;
 
忘了一句。你的 m1.free ; 也是不能画图的原因之一。
 
我的series是动态生成的,不能确定是否是TLlineseries

我已经找到答案了
对series付植前不用create,free 。

var
m1:tchartseries ;
begin
m1:=achart.GetASeries ;
m1.Clear ;
。。。。。
循环语句:
m1.title:=Query.fieldbyname('name').asstring ;
m1.Active :=true ;
achart.add(m1) ;
query.next ;
结束

我想做循环,形成多条chart series。但是只增加了一条series,而且的确只有一条。为什么??
为什么??
 
你没有在循环语句中创建新的曲线,自然只有一条曲线啦。
不知道你的意图是什么。怎么在作图时还不能确定图的样式(线图,饼图...??)
 
我也需要这方面的资料,如蒙赐教不胜感激!(E_mail:dingbaosheng@163.net)
 
虾米兄弟,问题解决了吗?是不是该算帐了。

dingbaosheng :
不知你需要的是什么,文挡在DELPHI的帮助里。我就是看帮助的。
 
问题没有解决,真烦人。
1。我想动态的建立一个包含任意个数的series
2。series的类型不定
3。series组的类型由chart的第一个series决定
我给出的方案:
for i:=1 to n do //循环
begin
m[j]:=tchartseries.Create(achart) ;
m[j].Assign(achart.GetASeries) ;
m[j].Clear ;
m[j].title:=dm.Query.fieldbyname('name').asstring ;
m[j].Active :=true ;
while ..... //
begin
m[j].addxy(........) //增加单条series的点
.....
end ;
......
achart.AddSeries(m[j]);
end ;
achart.AutoRefresh :=true ;
但是却没有画出来
 
>>1。我想动态的建立一个包含任意个数的series
>>2。series的类型不定
>>3。series组的类型由chart的第一个series决定


那至少你的第一个series的类型要确定吧。看看delhi自己的chart的edit teechart吧,也
是要你先确定了series的类型的。如果要运行时确定,可以用radiobutton选择
 
第一个是由chart中存在的第一个series决定的
不能确定是什么类型,只能在后面加,
我代码中的
m[j].Assign(achart.GetASeries) ;
就是得到series的类型和属性
 
如果不在edit teechart里加入,也不在程序初试化时加入,那第一个是哪来的呢 ?
 
是在edit teechart里加入的
可是我想做一个通用的过程,
因为可能会有很多的chart
很多的series,能够忽略series的属性吗??
 
当然不能。要不然tchart怎么知道画什么图。你可以设一个flag判断一下就可以啦。
 
var series : TChartSeries ;
flag : word ;
...
case flag of
1 : series := TLineSeries(chart2) ;
...
2 : series := TPieSeries (chart1);
 
问题解决了,感谢braintwist
份分儿了
 

Similar threads

后退
顶部