如何让DBGrid中每一行颜色按照用户自己的意愿控制
2004-12-28 17:49
381 查看
中国地质大学研究生院
张兵兵 黄孝林
---- 有个问题是在Delphi中使用DBGrid时,如何让DBGrid中每一行颜色按照用户自己的意愿控制。最初看到这个问题时,我们以为非常非常简单,所以马上动手准备解决它。结果却发现不是那么回事,传统方法根本不能发挥作用。在电脑面前一直坐到凌晨4点,不断地调试,幸运地是凭借平时积累的一点编程经验,终于找到了开门的匙钥。现将它充公,供大家享用。
---- 1、 数据表的建立
---- 在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;
---- 4、程序运行结果
---- 本程序在win98(中文版)和delphi4.0(C/S版)中测试运行,得到预计的结果:第一行和第三行变为红色,第二行变为棕色,第四行为绿色,满足了基本要求。
张兵兵 黄孝林
---- 有个问题是在Delphi中使用DBGrid时,如何让DBGrid中每一行颜色按照用户自己的意愿控制。最初看到这个问题时,我们以为非常非常简单,所以马上动手准备解决它。结果却发现不是那么回事,传统方法根本不能发挥作用。在电脑面前一直坐到凌晨4点,不断地调试,幸运地是凭借平时积累的一点编程经验,终于找到了开门的匙钥。现将它充公,供大家享用。
---- 1、 数据表的建立
---- 在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;
---- 4、程序运行结果
---- 本程序在win98(中文版)和delphi4.0(C/S版)中测试运行,得到预计的结果:第一行和第三行变为红色,第二行变为棕色,第四行为绿色,满足了基本要求。
相关文章推荐
- VB 2005 - 读者询问 DrawString 问题—如何根据用户自己选择的颜色来绘制
- VB 2005 - 读者询问 DrawString 问题—如何根据用户自己选择的颜色来绘制
- 如何在Android Quick Search Box中添加自己的app,按照我的意愿去Search。
- 按条件控制dbgrid每一行的颜色(3种以上的颜色)
- matlab如何使用、显示、修改和如何创建用户自己的颜色映象
- 小技巧:(javascript)如何让用户自由控制html页面大段文字的行间距和背景颜色
- (javascript)如何让用户自由控制html页面大段文字的行间距和背景颜色
- 如何在Android Quick Search Box中添加自己的app,按照我的意愿去Search。
- 如何将SAP的SCREEN显示到其他用户的机器上,接受其他用户控制
- 如何利用C++ Builder 5.0 Enterprise 创建用户自己的网上聊天程序
- Linux命令提示符如何按照自己的习惯修改?
- 如何利用C++ Builder 5.0 Enterprise 创建用户自己的网上聊天程序
- 如何用代码设置控制自己网站的网页在360浏览器打开时强制优先使用极速模式,而非兼容模式
- 关于 如何实践kernel/driver/u-boot ,怎么样按照作者的思路实现自己的代码
- 如何用路由器实现基于用户/IP的流量控制
- Win8系统如何关闭用户账户控制UAC
- 一步步教你如何用疯狂.NET架构中的通用权限系统 -- 如何控制用户显示的菜单权限
- EXCEL2013中如何按照单元格颜色或字体颜色排序【已解决】
- Vista 如何关闭UAC(用户帐户控制)