共享--随意控制DBGrid每一行的颜色篇(50分)

  • 主题发起人 主题发起人 sword_liu
  • 开始时间 开始时间
S

sword_liu

Unregistered / Unconfirmed
GUEST, unregistred user!
随意控制DBGrid每一行的颜色

Delphi中使用DBGrid控件时,每一列都能按需要随意地改变颜色,但要改变每一行的颜色却很难,那么在

不重新制作新控制件的情况下,有没有好的办法让DBGrid按照用户自己要求随意改变每一行颜色的?答案是

有,下面介绍一种简单的方法。


要改变DBGrid每一行的颜色,只要在ONDrawColumnCell事件中设定要改变颜色的行的条件,并指定DBGrid

的Canvas.Brush.color属性并且把Canvas.pen.mode属性设成pmmask,再调用DBGrid的

DefaultDrawColumnCell方法即可。注意在改变这两个属性前要先保护好原来的Canvas.Brush.color属性

的值,调节器用完成 DefaultDrawColumnCell方法后要把原属性值改回,现以

Delphi/demos/db/clientmd 目录下的演示程序clintproj.dpr 为例子

做简单说明,下面是对程序中的

栅格MemberGrid的合条件的整行进行变色,变成黑体背景黄色的,其它不合条件的行的颜色为正常字体,白

色背景,只在DrawColumnCelL 事件中设条件其它的不变,如下:


procedure TClientForm.MemberGridDrawColumnCell(


Sender: TObject; const Rect: TRect;


DataCol: Integer; Column: TColumn;


State: TGridDrawState);


var


oldcolor:tcolor;


oldpm:tpenmode;


begin


if DM.ProjectTEAM_LEADER.Value =


DM.Emp_ProjEMP_NO.Value then {设定变色的行的条件}


MemberGrid.Canvas.Font.Style := [fsBold];


MemberGrid.DefaultDrawColumnCell


(Rect

DataCol

Column

State);


{上面是演示程序的原内容,以下是增加部分}


if DM.ProjectTEAM_LEADER.Value =


DM.Emp_ProjEMP_NO.Value then {设定变色的行的条件}


begin


oldpm:= MemberGrid.Canvas.pen.mode;


oldcolor:= MemberGrid.Canvas.Brush.color;


MemberGrid.Canvas.Brush.color:=clyellow;


MemberGrid.Canvas.pen.mode:=pmmask;


MemberGrid.DefaultDrawColumnCell


(Rect

DataCol

Column

State);


MemberGrid.Canvas.Brush.color:=oldcolor;


MemberGrid.Canvas.pen.mode:=oldpm;


end;


end;
 
有没有其他好的技巧,发给我
e-mail: jszmail@263.net
 
你要哪方面的?
 
如果变色的条件非常复杂怎么办?

例如xxx字段满足 like '%fdd%'并且yyy字段>1000 < 2000这样的查询条件?
 
不错!我就是这样用的
可惜眼花了点
 
多人接受答案了。
 
后退
顶部