Delphi中為DBGrid控制項添加色彩
2005-08-08 09:13作者:小刀輕舞出處:天極網責任編輯:方舟
添加不同顏色到TDBGrid組件中將會增強組件的顯示外觀和區別資料庫中不同內容的行或列。
TDBGrid組件是一種非常棒的用來顯示資料內容的組件,本文的重點將用來解釋---如何在TDBGrid中改變特定行或列或儲存格的顏色。
準備階段:
本文假設你已經知道如何將一個TDBGrid與資料庫相聯結,最容易的方法是使用“Database Form Wizard”,將TDBGrid與DBDemo(Delphi內建資料庫中的employee.db相聯結,選擇除Except之外的所有欄位。
給TDBGrid上顏色
為列上色
第一種是最容易的一類上色,最直接的讓你的使用者看到,為TDBGrid中指定的某一列上色。
我們採用的方法是通過TDBGrid的TColumns屬性來完成。步驟如下:
用滑鼠選擇Form上的TDBGrid組件,在Object Inspector中雙擊TDBGrid的Columns屬性開啟Columns編輯視窗。(想瞭解更多內容查閱Delphi協助中的“Columns editor: creating persistent columns”主題。)
下面你所要做的就是指定你需要改變顏色的那一行或幾行的背景顏色,如果你要改變字型顏色,就將Font屬性集中的Color屬性修改一下。
就是這麼簡單,只要輕點幾下滑鼠就可以了,這樣修改之後的TDBGrid就不再是呆板的白色背景了。
為行上色
第1種如果你想要為TDBGrid中所選的某一格或某些格指定顏色,而且你不想使用dgRowSelect選項,因為你想讓TDBGrid可以直接在TDBGrid儲存格中編輯資料,你應該使用TDBGrid的OnDrawColumnCell事件。
下面我們用到的技巧可以動態改變TDBGrid中的儲存格文本的顏色。
代碼如下:
| procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin if Table1.FieldByName(’Salary’).AsCurrency>36000 then //指定所需改變顏色行的條件運算式 DBGrid1.Canvas.Font.Color:=clMaroon; //指定顏色為clMaroon DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State); end; |
上述代碼執行的功能是:把薪水超過3萬6千元的員工(employee)記錄字型顏色用栗色(Maroon)標出來。
第2種 如何動態改變TDBGrid中行的顏色,代碼如下:
| procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin if Table1.FieldByName(’Salary’).AsCurrency>36000 then DBGrid1.Canvas.Brush.Color:=clWhite; DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State); end; |
上述代碼執行的功能是:把薪水超過3萬6千元的員工(employee)記錄背景用白色(White)標出來。
第3種 如何改變指定列中某些儲存格的背景色,代碼如下:
| procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin if Table1.FieldByName(’Salary’).AsCurrency>40000 then begin DBGrid1.Canvas.Font.Color:=clWhite; DBGrid1.Canvas.Brush.Color:=clBlack; end; if DataCol = 4 then DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State); end; |
上述代碼執行的功能是:把薪水超過4萬的員工(employee)記錄背景用黑色(White)標出來而文本用白色標出來。
就是這樣方便,因為你使用的是Delphi,這句像在為Borland作廣告了,呵呵,我的程式在Delphi7+Winxp和Delphi+Windows2000上編譯通過,大家不妨一試。