在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等對象,可以將各種網格裝飾得絢麗多彩。