现在的位置: 首页 > 综合 > 正文

dbgrideh 的DefaultDrawColumnCell 和 TextRect

2018年02月06日 ⁄ 综合 ⁄ 共 2185字 ⁄ 字号 评论关闭

(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;


DefaultDrawColumnCell
TextRect 的区别:

功能: 重绘画格。 


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;

抱歉!评论已关闭.