Tchart 效果图

fine444 2009-02-28 10:59:15
我想做出如下图的效果


只是tchart部分,一点击字段就会统计,自己昨天弄了一下,很不成功,我的问题代码

procedure TForm9.bsSkinTreeView1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var

Series: TpieSeries;
begin
if bsskintreeview1.Selected.Text = '性别' then
//点中第一个根节点后
begin
adoquery1.Close;
adoquery1.SQL.clear;
adoquery1.SQL.Add('select * from 员工基本信息表 ');
adoquery1.open;
sumday1:=adoquery1.RecordCount;
end
else if bsskintreeview1.Selected.Text = '男' then
//点中第二个根节点后
begin
adoquery1.Close;
adoquery1.SQL.clear;
adoquery1.SQL.Add('select * from 员工基本信息表 where 性别=''男''');
adoquery1.open;
sumday2:=adoquery1.RecordCount;
end
else if bsskintreeview1.Selected.Text ='女' then
//点中第二个根节点后
begin
adoquery1.Close;
adoquery1.SQL.clear;
adoquery1.SQL.Add('select * from 员工基本信息表 where 性别=''女''');
adoquery1.open;
sumday3:=adoquery1.RecordCount;
Series := TpieSeries.Create(Chart1);

Series.Add(100, '男 '''+floattostr((sumday2/sumday1)*100)+'''''%', clRed);

Series.Add(200, '女 '''+floattostr((sumday3/sumday1)*100)+'''''%', clGreen);


Chart1.AddSeries(Series);
end;

end;


盼望高手能帮我写一下‘性别’部分的功能实现,以及别的字段切换的思路
...全文
171 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
bdmh 2009-03-01
  • 打赏
  • 举报
回复

procedure TForm9.bsSkinTreeView1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);



begin
if bsskintreeview1.Selected = nil then exit;
if bsskintreeview1.Selected.Text = '性别' then
//点中第一个根节点后
begin
adoquery1.Close;
adoquery1.SQL.clear;
adoquery1.SQL.Add('select * from 员工基本信息表 ');
adoquery1.open;
Chart1.SeriesList[1].Active := False;
Chart1.SeriesList[0].Active := True;
Chart1.SeriesList[0].Clear;
Series1.Add(sumday2, '男 ', clRed);
Series1.Add(sumday3, '女 ', clGreen);
end
else if bsskintreeview1.Selected.Text = '男' then
//点中第二个根节点后
begin
adoquery1.Close;
adoquery1.SQL.clear;
adoquery1.SQL.Add('select * from 员工基本信息表 where 性别=''男''');
adoquery1.open;
Chart1.SeriesList[1].Active := False;
Chart1.SeriesList[0].Active := True;
Chart1.SeriesList[0].Clear;
Series1.Add(sumday2, '男 ', clRed);
Series1.Add(sumday3, '女 ', clGreen);
end
else if bsskintreeview1.Selected.Text ='女' then
//点中第二个根节点后
begin
adoquery1.Close;
adoquery1.SQL.clear;
adoquery1.SQL.Add('select * from 员工基本信息表 where 性别=''女''');
adoquery1.open;
Chart1.SeriesList[1].Active := False;
Chart1.SeriesList[0].Active := True;
Chart1.SeriesList[0].Clear;
Series1.Add(sumday2, '男 ', clRed);
Series1.Add(sumday3, '女 ', clGreen);
end
else if bsskintreeview1.Selected.Text ='婚姻状况' then
//点中第二个根节点后
begin
adoquery1.Close;
adoquery1.SQL.clear;
adoquery1.SQL.Add('select * from 员工基本信息表 ');
adoquery1.open;
Chart1.SeriesList[0].Active := False;
Chart1.SeriesList[1].Active := True;
Chart1.SeriesList[1].Clear;
Series2.Add(sumday4, '已婚 ', clRed);
Series2.Add(sumday5, '未婚 ', clGreen);
end
else if bsskintreeview1.Selected.Text='已婚' then
begin
adoquery1.Close;
adoquery1.SQL.clear;
adoquery1.SQL.Add('select * from 员工基本信息表 where 婚姻状况=''已婚''');
adoquery1.open;
Chart1.SeriesList[0].Active := False;
Chart1.SeriesList[1].Active := True;
Chart1.SeriesList[1].Clear;
Series2.Add(sumday4, '已婚 ', clRed);
Series2.Add(sumday5, '未婚 ', clGreen);
end
else if bsskintreeview1.Selected.Text='未婚' then
begin
adoquery1.Close;
adoquery1.SQL.clear;
adoquery1.SQL.Add('select * from 员工基本信息表 where 婚姻状况=''未婚''');
adoquery1.open;
Chart1.SeriesList[0].Active := False;
Chart1.SeriesList[1].Active := True;
Chart1.SeriesList[1].Clear;
Series2.Add(sumday4, '已婚 ', clRed);
Series2.Add(sumday5, '未婚 ', clGreen);
end;

end;
starluck 2009-03-01
  • 打赏
  • 举报
回复
不好意思,这二天一直比较忙,你的是TCHART,不是TDBCHART。

其实你的已经实现了一个分类了,其它的都是大同小异,没有太明白,你现在遇到的难题是?
fine444 2009-03-01
  • 打赏
  • 举报
回复
我想点击性别和男女时,显示的是同一个chart,同时还想获得sumday 的值
qkhhxkj102 2009-02-28
  • 打赏
  • 举报
回复
我还是喜欢用数组

我现在没有看到你的图

所以不知道你要的是什么,

不过看你的代码可能知道是什么意思


你这样吧,不要从数据库里读出来就显示
先读到数组里,
再处理下,
要怎么显示就对数组处理下就可以了,那就也会快点,
个人看法呵呵
fine444 2009-02-28
  • 打赏
  • 举报
回复
这是一个树的事件,比如说我点击‘性别’‘男’‘女’希望Ttchart是一样的。另外那个分块是怎么根据数据分的?http://www.skycn.com/soft/27396.html你看看美萍的‘综合统计’》‘人事统计’的功能,我就想实现它
starluck 2009-02-28
  • 打赏
  • 举报
回复


procedure TForm2.Button1Click(Sender: TObject);
var
Series : TChartSeries ;
begin


Chart1.SeriesList.Clear; // 先清掉。
Series := TChartSeries.Create(Chart1);

Series.Add(100, 'aaa', clRed);

Series.Add(200, 'AAA', clGreen);

Chart1.AddSeries(Series);


end;

fine444 2009-02-28
  • 打赏
  • 举报
回复
现在不知道把TCHART放到哪里,现在放的位置每点击一下‘女’就多出来一个PIE,放到FORMCREATE里又接受不到sumday的值
starluck 2009-02-28
  • 打赏
  • 举报
回复


你上面的處理算法,沒有錯。



procedure TForm9.bsSkinTreeView1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var

Series: TpieSeries;
begin

if bsskintreeview1.Selected = nil then exit; // 底下語句就用你自己的就行了。沒有發現在錯誤。

fine444 2009-02-28
  • 打赏
  • 举报
回复
我只要它的TCHART和TREE部分就可以
fine444 2009-02-28
  • 打赏
  • 举报
回复
这是美萍的,我以它为榜样
starluck 2009-02-28
  • 打赏
  • 举报
回复
現在的效果圖沒看出來有什麼問題啊。呵呵
fine444 2009-02-28
  • 打赏
  • 举报
回复
那个series>datasource要怎么设啊
fine444 2009-02-28
  • 打赏
  • 举报
回复
我用的是TCHART 没和数据库相连 只是用到了adoquery.RecordCount

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧