dbgrideh 的DefaultDrawColumnCell 和 TextRect

本文介绍了如何在Delphi的DBGridEh组件中通过DefaultDrawColumnCell和TextRect方法实现单元格颜色和背景颜色的自定义。包括按行交替颜色、条件判断颜色设置,以及DefaultDrawColumnCell与TextRect的区别和用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(1)分行不同颜色设置;在DBGridEh1DrawColumnCell中写;

    if ADOQuery1.RecNo mod 2=0 then
 
   begin
 
       DBGridEh1.Canvas.Font.Color := clRed;
 
       DBGridEh1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
 
   end
 
   else begin
 
       DBGridEh1.Canvas.Font.Color := clGreen;
 
       DBGridEh1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
 
   end;

(2)分行不同背景颜色设置;在DBGridEh1DrawColumnCell中写;

    if ADOQuery1.RecNo mod 2=0 then
 
   begin
 
       DBGridEh1.Canvas.Brush.Color := clRed;
 
       DBGridEh1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
 
   end
 
   else begin
 
       DBGridEh1.Canvas.Brush.Color := clGreen;
 
       DBGridEh1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
 
   end;

(3)符合条件的单元格颜色或者背景颜色设置;在DBGridEh1DrawColumnCell中写;

    if Column.FieldName='价格' then
 
   begin
 
       if ADOQuery1.FieldByName('价格').AsFloat<0 then
 
       begin
 
           DBGridEh1.Canvas.Font.Color := clRed;
 
           DBGridEh1.Canvas.TextRect( Rect, Rect.Left, Rect.Top, Column.Field.AsString);
 
       end;
 
   end;


DefaultDrawColumnCellTextRect 的区别:

功能: 重绘画格。 


DBGrid属性

DefaultDrawing是用来控制Cell(网格)的绘制。

           若DefaultDrawing的缺省设置为True,意思是 Delphi使用DBGrid的缺省绘制方法来制作网格和其中所包含的数据,数据是按与特定列相连接的Tfield构件的DisplayFormat或 EditFormat特性来绘制的;

           若将DBGrid的DefaultDrawing特性设置成False,Delphi就不绘制网格或其内容,必须自行 在TDBGrid的OnDrawDataCell事件中提供自己的绘制例程(自画功能)。

画布Canvas,很多构件都有这一属性。

           Canvas代表了当前被显示DBGrid的表面,你如果把另行定义的显示内 容和风格指定给DBGrid对象的Canvas,DBGrid对象会把Canvas属性值在屏幕上显示出来。

           具体应用时,涉及到Canvas的Brush 属性和FillRect方法及TextOut方法。Brush属性规定了DBGrid.Canvas显示的图像、颜色、风格以及访问Windows GDI 对象句柄,FillRect方法使用当前Brush属性填充矩形区域,方法TextOut输出Canvas的文本内容

 

 

(Sender as TDbGrid).DefaultDrawColumnCell(Rect, DataCol, Column, State)

Rect:代表在画布中cell的位置位置所在,也就是你要对哪个区域进行重画;
DataCol:代表columns数组中column的标号
Column:描述cell的显示属性和对应的字段属性的tcolumn对象
State:描述cell是否有输入焦点、是否被选中、是否处于锁定模式(如同column header)

 

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
    i:integer;
begin
     i:= DataCol;
     if i mod 2<>0 then dbgrid1.canvas.Brush.color:=clblue
          else dbgrid1.Canvas.Brush.Color:=clred;
     dbgrid1.DefaultDrawcolumnCell(rect,datacol,column,state);

或者dbgrid1.Canvas.TextRect(rect,datacol,column,state);
end;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值