在微软软件帝国的吶喊声中VBnet和VC#net在短时间内拥有了一大批FANS能在开发工具领域和微软一决高下的Borland公司也不甘示弱把Delphi打扮的漂漂亮亮的让我们这些坚定的D迷依旧信心满满坚守这块阵地一些对Pascal语法情有独钟或对VCL爱慕非凡的新生力量也加入了我们阵营之中新加入的同志大多以开发数据库类的软件做为初始的一步这样对数据感知控件了解成为了必须这其中最经常用到的要属DBGrid虽然原生的DBGrid功能已经非常强大但在实际开发工作还是会碰到捉襟见肘的时候例如将不同类型的数据用不同的颜色加以区分这个功能就非常有用这一功能有助于加强软件与用户的交互本文的重点将用来解释如何在TDBGrid中改变特定行或列或单元格的颜色
准备阶段
本文假设你已经知道如何将一个TDBGrid与数据库相联接最容易的方法是使用Database Form Wizard将TDBGrid与DBDemo(Delphi自带数据库中的employeedb相联接选择除Except之外的所有字段
给TDBGrid上颜色
·为列上色
第一种是最容易的一类上色最直接的让你的用户看到为TDBGrid中指定的某一列上色
我们采用的方法是通过TDBGrid的TColumns属性来完成步骤如下
用鼠标选择Form上的TDBGrid组件在Object Inspector中双击TDBGrid的Columns属性打开Columns编辑窗口(想了解更多内容查阅Delphi帮助中的Columns editor: creating persistent columns主题)
下面你所要做的就是指定你需要改变颜色的那一行或几行的背景颜色如果你要改变字体颜色就将Font属性集中的Color属性修改一下
就是这么简单只要轻点几下鼠标就可以了这样修改之后的TDBGrid就不再是呆板的白色背景了
·为行上色
第种 如果你想要为TDBGrid中所选的某一格或某些格指定颜色而且你不想使用dgRowSelect选项因为你想让TDBGrid可以直接在TDBGrid单元格中编辑数据你应该使用TDBGrid的OnDrawColumnCell事件
下面我们用到的技巧可以动态改变TDBGrid中的单元格文本的颜色
代码如下
procedure TFormDBGridDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if TableFieldByName(Salary)AsCurrency> then
//指定所需改变颜色行的条件表达式
DBGridCanvasFontColor:=clMaroon;
//指定颜色为clMaroon
DBGridDefaultDrawColumnCell(Rect DataCol Column State);
end;
上述代码执行的功能是把薪水超过万千元的员工(employee)记录字体颜色用栗色(Maroon)标出来
第种 如何动态改变TDBGrid中行的颜色代码如下
procedure TFormDBGridDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if TableFieldByName(Salary)AsCurrency> then
DBGridCanvasBrushColor:=clWhite;
DBGridDefaultDrawColumnCell(Rect DataCol Column State);
end;
上述代码执行的功能是把薪水超过万千元的员工(employee)记录背景用白色(White)标出来
第种 如何改变指定列中某些单元格的背景色代码如下
procedure TFormDBGridDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
if TableFieldByName(Salary)AsCurrency> then
begin
DBGridCanvasFontColor:=clWhite;
DBGridCanvasBrushColor:=clBlack;
end;
if DataCol = then
DBGridDefaultDrawColumnCell(Rect DataCol Column State);
end;
上述代码执行的功能是把薪水超过万的员工(employee)记录背景用黑色(White)标出来而文本用白色标出来
就是这样方便因为你使用的是Delphi这句像在为Borland作广告了呵呵我的程序在Delphi+Winxp和Delphi+Windows上编译通过大家不妨一试