社区
Delphi
帖子详情
DBGrid怎么实现根据数据库中不同的值在界面上显示不同颜色的功能?
chenxi_aji
2003-08-24 12:19:29
比如在数据库中值为0代表正常,1代表故障,在界面上的DBGrid中我想在显示正常时为绿色,故障时为红色。怎么做到?
谢谢
...全文
43
6
打赏
收藏
DBGrid怎么实现根据数据库中不同的值在界面上显示不同颜色的功能?
比如在数据库中值为0代表正常,1代表故障,在界面上的DBGrid中我想在显示正常时为绿色,故障时为红色。怎么做到? 谢谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
hare007
2003-08-28
打赏
举报
回复
收藏
lzybfs
2003-08-27
打赏
举报
回复
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: DBDEMOS
TableName: EMPLOYEE.DB
Active: True;
DataSource1 DataSet: Table1
DBGrid1 DataSource1: DataSource1
DefaultDrawing: False
SpinEdit1 Increment:200
Value: 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 属性的构件中 ,让应用程序的用户界面更加友好。
dickeybird888
2003-08-24
打赏
举报
回复
首先将DBGrid的DefaultDrawing轩为False
之后在它的OnDrawDataCell事件编写响应代码。
在DBGrid1的DrawColumnCell 事件中写入
if query1.fieldbyname('flag').asstring='1' then
begin
DBGrid1.Canvas.Font.Color := clRed;
DBGrid1.Canvas.FillRect(Rect);
end;
else
begin
DBGrid1.Canvas.Font.Color := clGreen;
DBGrid1.Canvas.FillRect(Rect);
end;
DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;
//如果是行选色则用这句: DBGrid1.Canvas.Brush.Color := clMoneyGreen;
chenxi_aji
2003-08-24
打赏
举报
回复
是按照字段改变文本颜色,比如就在代表状态的字段中应用这种规则
fenglaile
2003-08-24
打赏
举报
回复
就是dbgrid自己定义的DrawColumnCell事件,在dbgrid创建的时候的过程
它自己默认的
chenxi_aji
2003-08-24
打赏
举报
回复
DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
这句是什么意思?谢谢
第一部分
界面
设计
实例036 如何在列表框
中
同时
显示
图像和文字 实例037 如何设置属性表组件标签图像 实例038 如何控制Memo组件的文字边界 实例039 如何使用代码控制文字滚动 实例040 如何纵向
显示
字符串 实例041 如何旋转
显示
字符...
True
DB
Grid
for .NET-基于.NET的企业版网格控件
此外,您具有对滚动行为的控制:选择具有在每个分割
中
独立工作的滚动条(对于需要从
不同
列的数据
中
对比字段
值
时非常有效)或选择一个滚动条同步滚动复合分割。 2D和3D单元
显示
选择两维,三维和两者结合来控制单元...
delphi 开发经验技巧宝典源码
0206 如何在
DB
Grid
中
实现
复制、粘贴
功能
137 0207 在
DB
Grid
中
将选
中
的多行删除 137 0208 在Data
Grid
中
如何使标题文字居
中
138 0209 如何把ListBox
中
的内容拖曳到另一个ListBox
中
139 0210 把
DB
Grid
中
的数据...
delphi 开发经验技巧宝典源码06
0206 如何在
DB
Grid
中
实现
复制、粘贴
功能
137 0207 在
DB
Grid
中
将选
中
的多行删除 137 0208 在Data
Grid
中
如何使标题文字居
中
138 0209 如何把ListBox
中
的内容拖曳到另一个ListBox
中
139 0210 把
DB
Grid
中
的数据...
C++Builder精彩编程实例集锦的源代码前3部分.rar
实例036 如何在列表框
中
同时
显示
图像和文字 实例037 如何设置属性表组件标签图像 实例038 如何控制Memo组件的文字边界 实例039 如何使用代码控制文字滚动 实例040 如何纵向
显示
字符串 实例041 如何旋转
显示
字符...
Delphi
5,388
社区成员
262,730
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章