以前的贴子不少的,可以查一查呀:
procedure Tinfo.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if query1.FieldByName(’field1’).asstring='aaa' then
begin
dbgrid1.Canvas.Font.Color:=clred;
dbgrid1.Canvas.Brush.color:=clyellow;
end
else
begin
dbgrid1.Canvas.Font.Color:=clblue;
dbgrid1.Canvas.Brush.color:=clyellow;
end;
dbgrid1.DefaultDrawColumnCell(rect,datacol,column,state);
end;
procedure Tinfo.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if query1.FieldByName(’field1’).asstring='aaa' then
begin
dbgrid1.Canvas.Font.Color:=clred;
dbgrid1.Canvas.Brush.color:=clyellow;
end
else
begin
dbgrid1.Canvas.Font.Color:=clblue;
dbgrid1.Canvas.Brush.color:=clyellow;
end;
dbgrid1.DefaultDrawColumnCell(rect,datacol,column,state);
end;
解决方案 »
- 救命,D2007下面正常的DBX+SQL SERVER2000程序转到XE出现的大问题!
- 如何在delphi程序中杀掉word进程
- (求助)新手问问题:对一控件添加一onbuttonclick事件,即添加一默认的处理动作。
- 在线等候:怎么用delphi编程获取当前active的web页面地址?
- 年终散分
- 请高手给看看这个FreeLibrary的问题.
- wr960204(武稀松)进来拿分?
- 小问题!各位高手请进,问一个关于鼠标中间键滚动的时候,数据表的指针为什么没有滚下来?
- 我在主窗口里调用一个子窗口,目的是想在主窗口点击时能调用这个子窗口。但不知为什么每次运行时进入的都是子窗口。
- 怎样才知道准备打开的文件是否已经被其他程序打开了?怎样读取一个只读文件的内容呢?
- 数据库开发的问题!来者有分,不够再加!
- 庆祝菜鸟程序员联盟成立,特来散分~~
DBGrid1.Canvas.FillRect(Rect);
Delphi中的数据网格控件(TDbGrid)对于显示和编辑数据库中大量的数据起着十分重要的作用;然而,在使用数据网格控件的同时,也往往因为表格中大量的数据不易区分,而令操作者眼花缭乱。如何提高网格控件的易用性,克服它的此项不足呢?本文从改变数据网格的色彩配置角度,提出了一种解决办法。 以下为数据网格控件的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);上述6种方法分别就数据网格控件的列和行的色彩进行了设置,读者可以根据自己的需要设置特效。该程序在Delphi5中测试通过。