線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:926
推到 Plurk!
推到 Facebook!

随意控制DBGrid每一行的颜色

 
wnhoo
高階會員


發表:75
回覆:443
積分:198
註冊:2003-04-22

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-04-26 19:01:33 IP:61.155.xxx.xxx 未訂閱
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梦情缘
------
风花雪月 e梦情缘
系統時間:2024-05-15 4:05:34
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!