楼主,你有福了,这是我做项目的这段代码。你完全用得着!!! procedure TBrowseForm.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin with dbgrid1 do begin if ((state=[gdselected]) or (state=[gdselected,gdfocused])) then begin canvas.Font.Color:=clyellow; canvas.Brush.Color:=clnavy; end else begin if datasource1.DataSet.RecNo mod 2<>0 then canvas.Brush.Color:=clwhite else canvas.Brush.Color:=$00eaeaea; end; defaultdrawcolumncell(rect,datacol,column,state); end; end;你只要改改FORM的名称和DBgrid的名称和你的相对应就可以了!!!!!!!! 为了你无悔做一切!!!
如何使DBGRID网格的颜色随此格中的数据值的变化而变化。如<60的网格为红色?Delphi中数据控制构件DBGrid是用来反映数据表的最重要、也是最常用的构件。在应用程序中,如果以彩色的方式来显示DBGrid,将会增加其可视性,尤其在显示一些重要的或者是需要警示的数据时,可以改变这些数据所在的行或列的前景和背景的颜色。 DBGrid属性DefaultDrawing是用来控制Cell(网格)的绘制。若DefaultDrawing的缺省设置为True,意思是Delphi使用DBGrid的缺省绘制方法来制作网格和其中所包含的数据,数据是按与特定列相连接的Tfield构件的DisplayFormat或EditFormat特性来绘制的;若将DBGrid的DefaultDrawing特性设置成False,Delphi就不绘制网格或其内容,必须自行在TDBGrid的OnDrawDataCell事件中提供自己的绘制例程(自画功能)。 在这里将用到DBGrid的一个重要属性:画布Canvas,很多构件都有这一属性。Canvas代表了当前被显示DBGrid的表面,你如果把另行定义的显示内容和风格指定给DBGrid对象的Canvas,DBGrid对象会把Canvas属性值在屏幕上显示出来。具体应用时,涉及到Canvas的Brush属性和FillRect方法及TextOut方法。Brush属性规定了DBGrid.Canvas显示的图像、颜色、风格以及访问Windows GDI 对象句柄,FillRect方法使用当前Brush属性填充矩形区域,方法TextOut输出Canvas的文本内容。 以下用一个例子来详细地说明如何显示彩色的DBGrid。在例子中首先要有一个DBGrid构件,其次有一个用来产生彩色筛选条件的SpinEdit构件,另外还有ColorGrid构件供自由选择数据单元的前景和背景的颜色。 1.建立名为ColorDBGrid的Project,在其窗体Form1中依次放入所需构件,并设置属性为相应值,具体如下所列: Table1 DatabaseName: DBDEMOSTableName: EMPLOYEE.DBActive: True; DataSource1 DataSet: Table1 DBGrid1 DataSource1: DataSource1DefaultDrawing: False SpinEdit1 Increment:200Value: 20000 ColorGrid1 GridOrdering: go16*1 2.为DBGrid1构件OnDrawDataCell事件编写响应程序: procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;Field: TField; State: TGridDrawState); begin if Table1.Fieldbyname(′Salary′).value<=SpinEdit1.value then DBGrid1.Canvas.Brush.Color:=ColorGrid1.ForeGroundColor else DBGrid1.Canvas.Brush.Color:=ColorGrid1.BackGroundColor; DBGrid1.Canvas.FillRect(Rect); DBGrid1.Canvas.TextOut(Rect.left+2,Rect.top+2,Field.AsString); end; 这个过程的作用是当SpinEdit1给定的条件得以满足时,如′salary′变量低于或等于SpinEdit1.Value时,DBGrid1记录以ColorGrid1的前景颜色来显示,否则以ColorGrid1的背景颜色来显示。然后调用DBGrid的Canvas的填充过程FillRect和文本输出过程重新绘制DBGrid的画面。 3.为SpinEdit1构件的OnChange事件编写响应代码: procedure TForm1.SpinEdit1Change(Sender: TObject); begin DBGrid1.refresh; end; 当SpinEdit1构件的值有所改变时,重新刷新DBGrid1。 4.为ColorGrid1的OnChange事件编写响应代码: procedure TForm1.ColorGrid1Change(Sender: TObject); begin DBGrid1.refresh; end; 当ColorGrid1的值有所改变时,即鼠标的右键或左键单击ColorGrid1重新刷新DBGrid1。 5.为Form1窗体(主窗体)的OnCreate事件编写响应代码: procedure TForm1.FormCreate(Sender: TObject); begin ColorGrid1.ForeGroundIndex:=9; ColorGrid1.BackGroundIndex:=15; end; 在主窗创建时,将ColorGrid1的初值设定前景为灰色,背景为白色,也即DBGrid的字体颜色为灰色,背景颜色为白色。 6.现在,可以对ColorDBGrid程序进行编译和运行了。当用鼠标的左键或右键单击ColorGrid1时,DBGrid的字体和背景颜色将随之变化。 在本文中,只是简单展示了以彩色方式显示DBGrid的原理,当然,还可以增加程序的复杂性,使其实用化。同样道理,也可以将这个方法扩展到其他拥有Canvas属性的构件中,让应用程序的用户界面更加友好。
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
if Odd(aqStore.RecNo + 1) then {隔行显示,aqStore为DBGrid.DataSource.DataSet}
begin
dgStore.Canvas.Brush.Color := clCream;
dgStore.Canvas.Font.Color := clNavy;
end;
if aqStore.FieldByName('scount').asinteger > 80 then {满足条件显示}
dgStore.Canvas.brush.Color := clLime; dgStore.DefaultDrawColumnCell(Rect, DataCol, Column, State); {生效}
end;
...
if Column.FieldName = 'onshow' then
if Column.Field.AsBoolean = true then
dgStore.Canvas.brush.Color := $00FFBB95;
...
编写grid的DrawColumnCell事件,根据自己的条件进行着色.
grid的CANVAS的BRUSH.COLOR是背景色,FONT.COLOR是字色,
最后调用DefaultDrawColumnCell.
不难的.
就用 miky(miky) 和 weizi2000(秋风啊) 说的方式了
再根据自己的要求灵活改动下就可以了。
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);
dbgrid.cell[1,2].color=red
或
dbgrid.colmuns[i].row[k].color=red谁有这样的函数拿出来看看,我也给100分啊
dbgrid.cell[1,2].color=red
或
dbgrid.colmuns[i].row[k].color=red谁有这样的函数拿出来看看,我也给100分啊=======================================================
我这里有对行进颜色设置的代码虽不是函数,但代码不长,你自己还可以把它写成函数,
procedure TBrowseForm.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
with dbgrid1 do
begin
if ((state=[gdselected]) or (state=[gdselected,gdfocused])) then
begin
canvas.Font.Color:=clyellow;
canvas.Brush.Color:=clnavy;
end
else
begin
if datasource1.DataSet.RecNo mod 2<>0 then
canvas.Brush.Color:=clwhite
else
canvas.Brush.Color:=$00eaeaea;
end;
defaultdrawcolumncell(rect,datacol,column,state);
end;
end;你只要改改FORM的名称和DBgrid的名称和你的相对应就可以了!!!!!!!!
为了你无悔做一切!!!
http://expert.csdn.net/Expert/topic/3062/3062400.xml?temp=.4825861