Delphi知识中心
www.delphi.ee
提供Delphi技术知识
与Delphi程序员共同进步


在线服务QQ:99923144 随时恭候您的光临
首页 基础知识 WIN系统 组件使用 组件开发 数据库 ACTIVEX 多媒体技术 网络技术 关于
文章类别:组件使用    你尚未登陆,会员功能无法使用,请从 网站首页 登陆。
  为Delphi数据表格增加底色色彩  
 
为Delphi数据表格增加底色色彩

在DELPHI中经常用到网格控件(DBGrid)显示数据,网格控件只提供了每一行的颜色属性,但在实际应用中我们经常希望它按某一行某一项的取值不同显示不同的颜色,甚至在网格中的单位表格项中显示出图像等等,下面我们以一个简单的例子来告诉大家怎么做。

  比如我们要求如果春季有退书用红色的底色表示,如果秋季有退书用黄色的底色表示

  利用DBGrid自绘功能可以很容易地实现这样的要求。用户可以处理DBGrid的OnDrawColumnCell事件,在其中实现特殊的效果。要判断记录是否满足要求,可以使用DBGrid的DataLink属性获得数据,但DBGrid的DataLink属性属于保护成员,必须在 TCustomDBGrid的子类中调用。

type
TMyCustomDBGrid = class(TCustomDBGrid);

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
sCjts,sQjTs:String;
begin
with TMyCustomerDBGrid(Sender) do
begin
Cjts:=DataLink.Fields[5].AsString;
sQjts:=DataLink.Fields[9].AsString;
if sCjts<>'' then       //春季退书数量>0的用红色显示
Canvas.Brush.Color := clRed
else
if sQjts<>'' then      //秋季退书数量>0的用黄色显示
Canvas.Brush.Color := clYellow
else
Canvas.Brush.Color:=clWhite;
Canvas.Font.Color:=clBlack;
canvas.fillrect(rect);
canvas.textout(rect.left+4,rect.top+4,Column.Field.AsString);
end;
end;

  由此方法可以延伸出其它控件的多种修饰方法,比如可以按数据项值采用不同的颜色,可以按记录号显示不同的颜色。总之,灵活应用canvas、rect及bitmap等对象,可以将各种网格装饰得绚丽多彩。

 

在线服务QQ:99923144 Delphi程序员QQ群(139442)
Delphi知识中心 www.delphi.ee 最专业的Delphi技术资料网站