.
.
.
DBGrid.DefaultDrawing := false;
.
.
.procedure TFormMain.DBGridDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin if (iRowID = 奇数) then//iRowID为全局整型变量,此处
//判据你应该会写
begin
DBGridTask.Canvas.Font.Color := clRed;
end
else begin
DBGridTask.Canvas.Font.Color := clBlue;
end; DBGridTask.DefaultDrawDataCell(Rect, Column.Field, State); Inc(iRowID);
end;
.
.
DBGrid.DefaultDrawing := false;
.
.
.procedure TFormMain.DBGridDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin if (iRowID = 奇数) then//iRowID为全局整型变量,此处
//判据你应该会写
begin
DBGridTask.Canvas.Font.Color := clRed;
end
else begin
DBGridTask.Canvas.Font.Color := clBlue;
end; DBGridTask.DefaultDrawDataCell(Rect, Column.Field, State); Inc(iRowID);
end;
解决方案 »
- delphi 比如Label1后加点后面不能自动展开
- MTS/COM+ 中间层接口方法复用的问题.
- 求一些关于Delphi的经典书籍!!!~~~~先谢谢了!~~~~~~~~
- 关于Delphi
- 关于Table的数据写回硬盘的问题50分
- 高分求解,,阻塞方式的SOCKET,读取过程怎么写??
- 简单的指针问题:
- 有哪位老兄做过超市POS系统,顾客显示器是如何驱动的,请告知,在下先多谢了!!!
- 我有一个PASCAL的解释/编辑器,请问它有什么价值?
- 大家来讨论一下,什么水平就可以去找delphi的工作了
- 想问各位(在北京的)都使用什么开发具?请注明工作地点。
- 第三次请叫:汇总问题,我还是不会,请高手帮助,这次我把问题说的很清楚,请看正文
.
.
DBGrid.DefaultDrawing := false;
.
.
.procedure TFormMain.DBGridDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin if (iRowID = 奇数) then//iRowID为全局整型变量,此处
//判据你应该会写
begin
DBGrid.Canvas.Font.Color := clRed;
end
else begin
DBGrid.Canvas.Font.Color := clBlue;
end; DBGrid.DefaultDrawDataCell(Rect, Column.Field, State); Inc(iRowID);
end;
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);
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;
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);
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;
unit DBGridPro;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Grids, DBGrids, stdctrls, extctrls, db ;type
TEnumPro = (poShowPic,poShowMem,poPicInCell);
TProOption = set of TEnumPro;
TDBGridPro = class(TDBGrid)
private
{ Private declarations }
image:timage;
scrollbox:tscrollbox;
memo:tmemo;
form:tform;
FColumn:TColumn;
FSetPro:Tprooption;
FColor1,FColor2:tcolor;
protected
{ Protected declarations }
public
{ Public declarations }
procedure cellclick(column:tcolumn);override;
procedure DrawdataCell(const Rect:TRect;Field:TField;
State: TGridDrawState); override; constructor Create(AOwner: TComponent); override;
procedure formexit(sender: tobject);
//procedure memoexit(sender: tobject);
published
{ Published declarations }
property Color1 : tcolor read FColor1 write FColor1;
property Color2 : tcolor read fcolor2 write Fcolor2;
property ProOption:tprooption read fsetpro write fsetpro;
end;procedure Register;implementationconstructor tdbgridpro.create(aowner: tcomponent);
begin
inherited;
fcolor1:=$00f7af9b;
fcolor2:=$00ff9d9d;
end;procedure tdbgridpro.memoexit;
begin
if memo<>nil then
with self.DataSource.DataSet do
begin
if canmodify then
begin
edit;
Fcolumn.field.assign(memo.lines);
end;
end;
end;procedure tdbgridpro.formexit;
begin
form.release;
end;procedure Tdbgridpro.DrawdataCell(const Rect:TRect;Field:TField;
State: TGridDrawState);
var
bmp:tbitmap;
textwidth:word;
begin
textwidth:=field.displaywidth*5;
if odd(rect.top div 18) then canvas.Brush.Color:=Fcolor1
else canvas.brush.Color:=Fcolor2;
Canvas.fillrect(rect);
if (Field is tfloatfield) or (Field is tfloatfield)
or (Field is tsmallintfield) or (Field is tintegerfield)
or (Field is twordfield)
then
Canvas.Textout(rect.right-textwidth-2,rect.top+2,field.displaytext)
else
Canvas.TextOut(rect.left+2,rect.top+2,field.displaytext); if Field.datatype in [fttypedbinary,ftgraphic,ftblob] then
if popicincell in fsetpro then
begin
bmp:=tbitmap.Create;
bmp.assign(field);
self.canvas.stretchdraw(rect,bmp);
bmp.free;
end; inherited;
end;
if (Table1.RecNo mod 2 ) = 0 then begin