dbgrid中如何给特定行变颜色?50分送上。(50分)

  • 主题发起人 主题发起人 zqqa
  • 开始时间 开始时间
Z

zqqa

Unregistered / Unconfirmed
GUEST, unregistred user!
例如,第一,二行红色,第三四行绿色。
 
在OnDrawCell的事件中写,把你想要的行填为相应的颜色
 
呵呵,试试这个,也许有点用
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
Field: TField; State: TGridDrawState);
begin
if DBGrid1.DataSource.DataSet.RecNo mod 2=0 then
begin

DBGrid1.Canvas.Brush.Color :=clWhite ;
DBGrid1.Canvas.FillRect(Rect);
DBGrid1.Canvas.Font.Color :=clBlack;
end
else
begin
DBGrid1.Canvas.Brush.Color :=clBlue ;
DBGrid1.Canvas.FillRect(Rect);
DBGrid1.Canvas.Font.Color :=clBlack;
end;
if gdSelected in State then
begin
DBGrid1.Canvas.Brush.Color :=clRed ;
DBGrid1.Canvas.FillRect(Rect);
DBGrid1.Canvas.Font.Color :=clBlack;
end;


DBGrid1.DefaultDrawDataCell(Rect, Field, State);
end;
 
mikegong,请问如何知道dbgrid现在draw的是哪一行?
怎么获得?
 
用这个看看。
在Delphi的工具菜单中选择Database desktop,在数据库DBDemos下建立一个名为example.db的数据表。数据表的字段和内容如下:
Name Age Wage
张山 25 500
王武 57 1060
李市 30 520
刘牛 28 390
---- 2、创建基于TDBGrid的TColoredDBGrid组件

在Delphi组件菜单中,选择New Component,在弹出对话框中作以下设置:

Ancestor Type = TDBGrid
Class Name = TColoredDBGrid
---- 然后单击OK按钮,Delphi自动完成组件基本框架的定义。增添OnDRawColoredDBGrid事件并使它出现在Object Inspector的Events中以便在应用程序中设定改变行颜色的条件。重载DrawCell方法,只能自己绘制单元格。不能通过在OnDrawColumnCell来设置颜色,因为在OnDrawColumnCell改变单元格的颜色会再次触发OnDrawColumnCell。

下面就是所创建组件的源程序 。

3、建立应用程序进行验证。

在Delphi文件菜单中选择New建立新的应用程序工程Project1和主窗体Form1,设置Form1的Caption属性为“控制DBGrid行颜色的示例”。在主窗体上添加Data Source、Table、Button和ColoredDBGrid组件。设置各组件的属性如下:

Table1.Database=’DBDemos’
Table1.Tablename=’example.db’
Datasource1.Dataset=Table1
ColoredDBGrid1.Datasource=DataSource1
Button1.Caption=’退出’
---- 在ColoredDBGrid1的onDRawColoredDBGrid事件中输入下列代码,设定由Wage(工资)来决定在ColoredDBGrid1各行的颜色。

procedure TForm1.ColoredDBGrid1 DRawColoredDBGrid
(Sender: TObject; Field: TField; var Color:
TColor; var Font: TFont);
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;
//用‘退出’按钮结束程序运行。
procedure TForm1.Button1Click(Sender: TObject);
begin
Close;
end;
 

Similar threads

D
回复
0
查看
938
DelphiTeacher的专栏
D
D
回复
0
查看
892
DelphiTeacher的专栏
D
D
回复
0
查看
864
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部