如何将DBGrid每行都是不同的颜色?解决给分!
解决方案 »
- delphi可以只生成一个可执行文件吗?
- 一个BUG还是Delphi本身的代码优化?
- query记录定位!列表框值
- 请问谁有关于DelPhiX里控件的属性。方法,事件的介绍的文档?
- 问题
- 关于delphi做动画的问题~~~~~~~~~~~急救
- 高手请进:Webbrowse打开窗口,怎样在动态生成的新的WebBrowse中取得打开的URL地址;
- 紧急问题!在线等待!为什么清空ListBox的内容后,里面总是有一个空行呢?
- 请问delphi6中的websnap用处有多大?
- 急!关于QUERY,用SQL进行插入记录,敬请各位赐教,我在线等着你的良方!
- 转换stringgrid内容到clientdataset但把clientdataset内容送到quickreport里只有当前记录,求各位帮忙啊~~
- 用delphi开发数据库程序,你们用什么做报表,你任为那一中好用,功能强大符合中国人的习惯
之后在它的OnDrawDataCell事件编写响应代码。
DBGrid1.Canvas.Brush.Color:=所需的着色值;
DBGrid1.Canvas.FillRect(Rect);//Rect为该事件的参数
DBGrid1.Canvas.TextOut(Rect.Left+2,Rect.Top+2,Field.AsString);
例子如下:
begin
if orders_listForm.orders_d.fieldbyname('flag').asboolean=true then
begin
DBGrid1.Canvas.Brush.Color := clMoneyGreen;
// DBGrid1.Canvas.Font.Color := clRed;
DBGrid1.Canvas.FillRect(Rect);
end;
DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;
但是颜色变了 而记录却不显示
有记录,但好象是记录字的颜色和背景色是一样的 字就显示不出来了
DefaultDrawing轩为False 是什么意思
其实我是想DBGrid1 的单数行 比如 1 3 5 ... 设置成一个颜色
双数行 2 4 6 ....设置成另一个颜色
还有就是我在DBGrid1选着某条记录 该行记录的背景就变颜色应该怎么做?
我想在DBGrid1的第一列里加一个小图片可以吗?
我将本贴加到100分 如上问题被某位大虾第一个解决 在开一贴送100分!
楼主,这要求太高了吧,如果有1万条记录,那不是要1万种颜色......
根据条件来设置颜色:
procedure TFrom.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if Query1.FieldByName('sex').AsString = '男' then
DBGrid1.Canvas.Font.Color := clBlue
else
DBGrid1.Canvas.Font.Color := clRed;
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end
DataCol: Integer; Column: TColumn; State: TGridDrawState);
Begin
If ADOQuery1.RecNO Mod 2 = 0 Then
DBGrid1.Font.Color := ClRed
Else
DBGrid1.Font.Color := ClBlack;
这样可以实现你的隔一行一个颜色
但是不是很好 我在考虑考虑 你也想想
DataCol: Integer; Column: TColumn; State: TGridDrawState);
Begin
If ADOQuery1.RecNO Mod 2 = 0 Then
DBGrid1.Font.Color := ClRed
Else
DBGrid1.Font.Color := ClBlack;
DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
Case dm.cds_ddzhx_ggxxtsh.RecNo mod 2 = 0 of //file://根据数据集的记录号进行判断
True : DbGrid1.Canvas.Brush.color:=clmoneygreen;// file://偶数行用浅绿色显示 file://奇数行用蓝色表示
end;
if ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then //file://选中行用红色显示
DbGrid1.Canvas.Brush.color:=clblue;
DbGrid1.Canvas.pen.mode:=pmMask;
DbGrid1.DefaultDrawColumnCell (Rect,DataCol,Column,State);end;
以下为数据网格控件的6种特殊效果的实现方法,至于数据网格控件与数据集如何连接的方法从略。
1. 纵向斑马线效果:实现网格的奇数列和偶数列分别以不同的颜色显示,以区别相邻的数据列。
file://在DbGrid的DrawColumnCell事件中编写如下代码:
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);
2. 纵向斑马线,同时以红色突出显示当前单元格效果:以突出显示当前选中的字段。
file://将上述代码修改为:
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=[gdSelected,gdFocused])) then
If Not DbGrid1.SelectedRows.CurrentRowSelected then
DbGrid1.Canvas.Brush.Color:=clRed; file://当前选中单元格显示红色
DbGrid1.Canvas.Pen.Mode:=pmMask;
DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
上述两种方法突出了列的显示效果。
3.在数据网格中以红色突出显示当前选中的行:
设置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);
4.行突显的斑马线效果:既突出当前行,又区分不同的列(字段)。
file://其它属性设置同3,将上述代码修改为:
if ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then
begin
Case DataCol Mod 2 = 0 of
True : DbGrid1.Canvas.Brush.color:=clRed; file://当前选中行的偶数列显示红色
False: DbGrid1.Canvas.Brush.color:=clblue; file://当前选中行的奇数列显示蓝色
end;
DbGrid1.Canvas.pen.mode:=pmmask;
DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
end;
5.横向斑马线,同时以红色突显当前行效果:
file://其它属性设置同3,将上述代码修改为:
Case Table1.RecNo mod 2 = 0 of file://根据数据集的记录号进行判断
True : DbGrid1.Canvas.Brush.color:=clAqua; file://偶数行用浅绿色显示
False: DbGrid1.Canvas.Brush.color:=clblue; file://奇数行用蓝色表示
end;
if ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then file://选中行用红色显示
DbGrid1.Canvas.Brush.color:=clRed;
DbGrid1.Canvas.pen.mode:=pmMask;
DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
6.双向斑马线效果:即行间用不同色区分,同时,选中行以纵向斑马线效果区分不同的列。
file://其它属性设置同3,将上述代码修改为:
Case Table1.RecNo mod 2 = 0 of file://根据数据集的记录号进行判断
True : DbGrid1.Canvas.Brush.color:=clAqua; file://偶数行用浅绿色显示
False: DbGrid1.Canvas.Brush.color:= clblue; file://奇数行用蓝色表示
end;
If ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then
Case DataCol mod 2 = 0 of
True : DbGrid1.Canvas.Brush.color:=clRed; file://当前选中行的偶数列用红色
False: DbGrid1.Canvas.Brush.color:= clGreen; file://当前选中行的奇数列用绿色表示
end;
DbGrid1.Canvas.pen.mode:=pmMask;
DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
7. 随意控制DBGrid 每一行的颜色:
Var
p : Integer;
begin
p := Table1.FindField('wage').AsInteger;
//取得当前记录的Wage字段的值。
if(p < 500) then begin
//程序将根据wage值设置各行的颜色。
Color := clGreen;
Font.Style := [fsItalic];
//不仅可以改变颜色,还可以改变字体
end;
if (p >= 500) And (p < 800) then
Color := clRed;
if(p >=800) then begin
Color := clMaroon;
Font.Style := [fsBold];
end;
end;
得分参照:
http://expert.csdn.net/Expert/topic/2332/2332454.xml?temp=.2882807