减小字体
增大字体
作者:佚名 来源:本站整理 发布时间:2009-03-16 20:01:13
在DELPHI中经常用到网格控件(DBGrid)显示数据,网格控件只提供了每一行的颜色属性,但在实际应用中我们经常希望它按某一行某一项的取值不同显示不同的颜色,甚至在网格中的单位表格项中显示出图像等等,下面我们以一个简单的例子来告诉大家怎么做。
比如我们要求如果春季有退书用红色表示,如果秋季有退书用黄色表示(图1)
图1
利用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); varsCjts,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等对象,可以将各种网格装饰得绚丽多彩。