求助高手(急...),cxdbtreelist,怎么让节点根据值的不同再改变记录的颜色?

人鱼传说 2009-02-11 05:27:58
请问:cxdbtreelist,怎么让节点根据值的不同再改变记录的颜色?

我在 cxDBTreeList1的CustomDrawCell事件里写如下代码:

procedure TForm1.cxDBTreeList1CustomDrawCell(Sender: TObject;
ACanvas: TcxCanvas; AViewInfo: TcxTreeListEditCellViewInfo;
var ADone: Boolean);
begin

if ADOQuery1.FieldByName('DepCode').AsString='0001' then
Acanvas.SetBrushColor(clRed)
end;


刚运行的时候,没有反应,但当鼠标点击到该变颜色的那条记录时,要么就是两条记录的颜色变了,要么就是所有的记录就都变颜色了.
请问该咋弄呢??????????????
...全文
355 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
人鱼传说 2009-02-12
  • 打赏
  • 举报
回复
谢谢bdmh,按照你的方法搞定了......

结贴.....
金卯刀 2009-02-12
  • 打赏
  • 举报
回复
to bdmh, “不能用ADOQuery1的值判断”,應該是沒有這樣的限制吧?

他的程序剛開始在 數據集 scroll滾動時,并無反應。
bdmh 2009-02-12
  • 打赏
  • 举报
回复
首先增加一列,字段为'DepCode',列名为cxCode

procedure TForm1.cxDBTreeList1CustomDrawCell(Sender: TObject;
ACanvas: TcxCanvas; AViewInfo: TcxTreeListEditCellViewInfo;
var ADone: Boolean);
begin

if AViewInfo.Node.Texts[cxCode.ItemIndex]='0001' then
Acanvas.SetBrushColor(clRed)
end; …
bdmh 2009-02-12
  • 打赏
  • 举报
回复
[Quote=引用楼主 baronyang 的帖子:]
请问:cxdbtreelist,怎么让节点根据值的不同再改变记录的颜色?

我在 cxDBTreeList1的CustomDrawCell事件里写如下代码:

Delphi(Pascal) code
procedure TForm1.cxDBTreeList1CustomDrawCell(Sender: TObject;
ACanvas: TcxCanvas; AViewInfo: TcxTreeListEditCellViewInfo;
var ADone: Boolean);
begin

if ADOQuery1.FieldByName('DepCode').AsString='0001' then
Acanvas.SetBrushColor(clRed)
end; …
[/Quote]

不能用ADOQuery1的值判断,要用AViewInfo中的属性去判断,当然你grid中要增加'DepCode'列,然后在AViewInfo中访问这个列的值,具体是AViewInfo的哪个属性,我帮你找找
金卯刀 2009-02-12
  • 打赏
  • 举报
回复
根據你前面的描述,應該是你的cxgrid與dataset的關系設定上的問題。比如cxgrid在剛開始沒有任何反應,就像dataset執行了disablecontrol一樣。我記得cxgrid的gridmode若設定為true會造成這種情況。
人鱼传说 2009-02-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 Avan_Lau 的回复:]
Delphi(Pascal) code
procedure TForm1.cxDBTreeList1CustomDrawCell(Sender: TObject;
ACanvas: TcxCanvas; AViewInfo: TcxTreeListEditCellViewInfo;
var ADone: Boolean);
var
vColor : TColor;
begin
vColor := aCanvas.Brush.Color;//先记录原先的颜色
if ADOQuery1.FieldByName('DepCode').AsString='0001' then
Acanvas.SetBrushColor(clRed)
else
Acanvas.SetBrushColor(vColor);
end;
[/Quote]

我按照你的这样写了....效果还是一样...要么就全部变颜色,要么是一两条变颜色!!!! 怪!!!!
金卯刀 2009-02-11
  • 打赏
  • 举报
回复

procedure TForm1.cxDBTreeList1CustomDrawCell(Sender: TObject;
ACanvas: TcxCanvas; AViewInfo: TcxTreeListEditCellViewInfo;
var ADone: Boolean);
var
vColor : TColor;
begin
vColor := aCanvas.Brush.Color;//先记录原先的颜色
if ADOQuery1.FieldByName('DepCode').AsString='0001' then
Acanvas.SetBrushColor(clRed)
else
Acanvas.SetBrushColor(vColor);
end;



kampan 2009-02-11
  • 打赏
  • 举报
回复
参考如下:

procedure TFrmMain.DBGridEquipmentDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
if gdSelected in State then Exit; //隔行改变网格背景色:
if FrmDm.ADMachine.FieldByName('Status').AsInteger = MACHINE_STATE_DRAFT then
(Sender as TDBGrid).Canvas.Brush.Color := clInfoBk//RGB(255, 201, 147) //定义背景颜色
else if FrmDm.ADMachine.FieldByName('Status').AsInteger = MACHINE_STATE_AUDITING then
(Sender as TDBGrid).Canvas.Brush.Color := RGB(151, 203, 255) //定义背景颜色
else if FrmDm.ADMachine.FieldByName('Status').AsInteger = MACHINE_STATE_AUDITED then
(Sender as TDBGrid).Canvas.Brush.Color := RGB(165, 220, 220) //定义背景颜色
else if FrmDm.ADMachine.FieldByName('Status').AsInteger = MACHINE_STATE_STANDBY then
(Sender as TDBGrid).Canvas.Brush.Color := RGB(154, 154, 78) //定义背景颜色
else if (FrmDm.ADMachine.FieldByName('Status').AsInteger = MACHINE_STATE_ENCAPSULATED)
or (FrmDm.ADMachine.FieldByName('Status').AsInteger = MACHINE_STATE_ABANDONED) then
(Sender as TDBGrid).Canvas.Brush.Color := clMedGray; //定义背景颜色

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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