DBGrid怎么实现根据数据库中不同的值在界面上显示不同颜色的功能?

chenxi_aji 2003-08-24 12:19:29
比如在数据库中值为0代表正常,1代表故障,在界面上的DBGrid中我想在显示正常时为绿色,故障时为红色。怎么做到?
谢谢
...全文
43 6 打赏 收藏 转发到动态 举报
写回复
用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);
这句是什么意思?谢谢

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧