当前位置:编程学习 > Delphi >>

delphi 更改DBGrid 颜色技巧

1、根据条件更改某一单元格的颜色


[delphi]
procedure TMainFrm.First_DGDrawColumnCell(Sender: TObject; 
  const Rect: TRect; DataCol: Integer; Column: TColumn; 
  State: TGridDrawState); 
begin 
  if DM.FirstListStatus.AsString='生产' then begin 
     First_DG.Canvas.Font.Color:=clGreen 
   end 
  else begin 
     First_DG.Canvas.Font.Color:=clRed; 
  end; 
  if DataCol = 4 then 
     First_DG.DefaultDrawColumnCell(Rect,DataCol,Column,State); 
end; 

procedure TMainFrm.First_DGDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
  if DM.FirstListStatus.AsString='生产' then begin
     First_DG.Canvas.Font.Color:=clGreen
   end
  else begin
     First_DG.Canvas.Font.Color:=clRed;
  end;
  if DataCol = 4 then
     First_DG.DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;

2、多种改变方式


[delphi]
<SPAN style="COLOR: #000000">procedure TMainForm.DBGrid1DrawColumnCell(Sender: TObject; 
  const Rect: TRect; DataCol: Integer; Column: TColumn;State: TGridDrawState); 
var i :integer; 
begin 
  if gdSelected in State then Exit; 
//定义表头的字体和背景颜色:  
    for i :=0 to (Sender as TDBGrid).Columns.Count-1 do 
    begin 
      (Sender as TDBGrid).Columns[i].Title.Font.Name :='宋体'; //字体  
      (Sender as TDBGrid).Columns[i].Title.Font.Size :=9; //字体大小  
      (Sender as TDBGrid).Columns[i].Title.Font.Color :=$000000ff; //字体颜色(红色)  
      (Sender as TDBGrid).Columns[i].Title.Color :=$0000ff00; //背景色(绿色)  
    end; 
//隔行改变网格背景色:  
  if Query1.RecNo mod 2 = 0 then 
    (Sender as TDBGrid).Canvas.Brush.Color := clInfoBk //定义背景颜色  
  else 
    (Sender as TDBGrid).Canvas.Brush.Color := RGB(191, 255, 223); //定义背景颜色  
//定义网格线的颜色:  
DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State); 
  with (Sender as TDBGrid).Canvas do //画 cell 的边框  
  begin 
    Pen.Color := $00ff0000; //定义画笔颜色(蓝色)  
    MoveTo(Rect.Left, Rect.Bottom); //画笔定位  
    LineTo(Rect.Right, Rect.Bottom); //画蓝色的横线  
    Pen.Color := $0000ff00; //定义画笔颜色(绿色)  
    MoveTo(Rect.Right, Rect.Top); //画笔定位  
    LineTo(Rect.Right, Rect.Bottom); //画绿色的竖线  
  end; 
end;</SPAN> 

procedure TMainForm.DBGrid1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;State: TGridDrawState);
var i :integer;
begin
  if gdSelected in State then Exit;
//定义表头的字体和背景颜色:
    for i :=0 to (Sender as TDBGrid).Columns.Count-1 do
    begin
      (Sender as TDBGrid).Columns[i].Title.Font.Name :='宋体'; //字体
      (Sender as TDBGrid).Columns[i].Title.Font.Size :=9; //字体大小
      (Sender as TDBGrid).Columns[i].Title.Font.Color :=$000000ff; //字体颜色(红色)
      (Sender as TDBGrid).Columns[i].Title.Color :=$0000ff00; //背景色(绿色)
    end;
//隔行改变网格背景色:
  if Query1.RecNo mod 2 = 0 then
    (Sender as TDBGrid).Canvas.Brush.Color := clInfoBk //定义背景颜色
  else
    (Sender as TDBGrid).Canvas.Brush.Color := RGB(191, 255, 223); //定义背景颜色
//定义网格线的颜色:
DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
  with (Sender as TDBGrid).Canvas do //画 cell 的边框
  begin
    Pen.Color := $00ff0000; //定义画笔颜色(蓝色)
    MoveTo(Rect.Left, Rect.Bottom); //画笔定位
    LineTo(Rect.Right, Rect.Bottom); //画蓝色的横线
    Pen.Color := $0000ff00; //定义画笔颜色(绿色)
    MoveTo(Rect.Right, Rect.Top); //画笔定位
    LineTo(Rect.Right, Rect.Bottom); //画绿色的竖线
  end;
end;

 

 

3、纵向斑马线效果:实现网格的奇数列和偶数列分别以不同的颜色显示以区别相邻的数据列。


[delphi]
Case DataCol Mod 2 = 0 of 
  True: DbGrid1.Canvas.Brush.Color:= clBlue; file://偶数列用蓝色  
 False: DbGrid1.Canvas.Brush.Color:= clAqua; file://奇数列用浅绿色  
End; 
DbGrid1.Canvas.Pen.Mode:=pmMask; 
DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State); 

Case DataCol Mod 2 = 0 of
  True: DbGrid1.Canvas.Brush.Color:= clBlue; file://偶数列用蓝色
 False: DbGrid1.Canvas.Brush.Color:= clAqua; file://奇数列用浅绿色
End;
DbGrid1.Canvas.Pen.Mode:=pmMask;
DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);

4、纵向斑马线,同时以红色突出显示当前单元格效果:以突出显示当前选中的字段。

[delphi]
Case DataCol Mod 2 = 0 of 
True: DbGrid1.Canvas.Brush.Color:= clBlue; file://偶数列用蓝色  
False: DbGrid1.Canvas.Brush.Color:= clAqua; file://奇数列用浅绿色  
End; 
If ((State = [gdSelected]) or (State=[gdSelectedgdFocused])) then 
If Not DbGrid1.SelectedRows.CurrentRowSelected then 
DbGrid1.Canvas.Brush.Color:=clRed; file://当前选中单元格显示红色  
DbGrid1.Canvas.Pen.Mode:=pmMask; 
DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State); 

Case DataCol Mod 2 = 0 of
True: DbGrid1.Canvas.Brush.Color:= clBlue; file://偶数列用蓝色
False: DbGrid1.Canvas.Brush.Color:= clAqua; file://奇数列用浅绿色
End;
If ((State = [gdSelected]) or (State=[gdSelectedgdFocused])) then
If Not DbGrid1.SelectedRows.CurrentRowSelected then
DbGrid1.Canvas.Brush.Color:=clRed; file://当前选中单元格显示红色
DbGrid1.Canvas.Pen.Mode:=pmMask;
DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
5、在数据网格中以红色突出显示当前选中的行。


[delphi]
设置DbGrid控件的Options属性中的dgRowSelect属性为真,Color属性为clAqua(背景色) 
在DbGrid的DrawColumnCell事件中编写如下代码: 
 
if ((State = [gdSelected]) or (State=[gdSelected gdFocused])) then 
DbGrid1.Canvas.Brush.color:=clRed; file://当前行以红色显示,其它行使用背景的浅绿色  
DbGrid1.Canvas.pen.mode:=pmmask; 
DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State); 

设置DbGrid控件的Options属性中的dgRowSelect属性为真,Color属性为clAqua(背景色)
在DbGrid的DrawColumnCell事件中编写如下代码:

if ((State = [gdSelected]) or (State=[gdSelected gdFocused])) then
DbGrid1.Canvas.Brush.color:=clRed; file://当前行以红色显示,其它行使用背景的浅绿色
DbGrid1.Canvas.pen.mode:=pmmask;
DBGr

补充:软件开发 , Delphi ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,