在微軟軟件帝國的吶喊聲中,VB.net和VC#.net在短時間內擁有了一大批FANS。能在開發工具領域和微軟一決高下的Borland公司也不甘示弱把Delphi“打扮”的漂漂亮亮的,讓我們這些堅定的D迷依舊信心滿滿,堅守這塊陣地。一些對Pascal語法情有獨鐘或對VCL愛慕非凡的新生力量也加入了我們陣營之中,新加入的同志大多以開發數據庫類的軟件做為初始的一步,這樣對“數據感知”控件了解成為了必須,這其中最經常用到的要屬DBGrid。雖然原生的DBGrid功能已經非常強大,但在實際開發工作還是會碰到捉襟見肘的時候,例如將不同類型的數據用不同的顏色加以區分這個功能就非常有用,這一功能有助於加強軟件與用戶的交互。本文的重點將用來解釋---如何在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上編譯通過,大家不妨一試。