Delphi中為DBGrid控件添上色彩

字號(hào):

在微軟軟件帝國(guó)的吶喊聲中,VB.net和VC#.net在短時(shí)間內(nèi)擁有了一大批FANS。能在開發(fā)工具領(lǐng)域和微軟一決高下的Borland公司也不甘示弱把Delphi“打扮”的漂漂亮亮的,讓我們這些堅(jiān)定的D迷依舊信心滿滿,堅(jiān)守這塊陣地。一些對(duì)Pascal語(yǔ)法情有獨(dú)鐘或?qū)CL愛慕非凡的新生力量也加入了我們陣營(yíng)之中,新加入的同志大多以開發(fā)數(shù)據(jù)庫(kù)類的軟件做為初始的一步,這樣對(duì)“數(shù)據(jù)感知”控件了解成為了必須,這其中最經(jīng)常用到的要屬DBGrid。雖然原生的DBGrid功能已經(jīng)非常強(qiáng)大,但在實(shí)際開發(fā)工作還是會(huì)碰到捉襟見肘的時(shí)候,例如將不同類型的數(shù)據(jù)用不同的顏色加以區(qū)分這個(gè)功能就非常有用,這一功能有助于加強(qiáng)軟件與用戶的交互。本文的重點(diǎn)將用來(lái)解釋---如何在TDBGrid中改變特定行或列或單元格的顏色。
    準(zhǔn)備階段:
    本文假設(shè)你已經(jīng)知道如何將一個(gè)TDBGrid與數(shù)據(jù)庫(kù)相聯(lián)接,最容易的方法是使用“Database Form Wizard”,將TDBGrid與DBDemo(Delphi自帶數(shù)據(jù)庫(kù)中的employee.db相聯(lián)接,選擇除Except之外的所有字段。
    給TDBGrid上顏色
    ·為列上色
    第一種是最容易的一類上色,最直接的讓你的用戶看到,為TDBGrid中指定的某一列上色。
    我們采用的方法是通過(guò)TDBGrid的TColumns屬性來(lái)完成。步驟如下:
    用鼠標(biāo)選擇Form上的TDBGrid組件,在Object Inspector中雙擊TDBGrid的Columns屬性打開Columns編輯窗口。(想了解更多內(nèi)容查閱Delphi幫助中的“Columns editor: creating persistent columns”主題。)
    下面你所要做的就是指定你需要改變顏色的那一行或幾行的背景顏色,如果你要改變字體顏色,就將Font屬性集中的Color屬性修改一下。
    就是這么簡(jiǎn)單,只要輕點(diǎn)幾下鼠標(biāo)就可以了,這樣修改之后的TDBGrid就不再是呆板的白色背景了。
    ·為行上色
    第1種 如果你想要為TDBGrid中所選的某一格或某些格指定顏色,而且你不想使用dgRowSelect選項(xiàng),因?yàn)槟阆胱孴DBGrid可以直接在TDBGrid單元格中編輯數(shù)據(jù),你應(yīng)該使用TDBGrid的OnDrawColumnCell事件。
    下面我們用到的技巧可以動(dòng)態(tài)改變TDBGrid中的單元格文本的顏色。
    代碼如下:
    procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
    begin
    if Table1.FieldByName('Salary').AsCurrency>36000 then
    //指定所需改變顏色行的條件表達(dá)式
    DBGrid1.Canvas.Font.Color:=clMaroon;
    //指定顏色為clMaroon
    DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
    end;
    上述代碼執(zhí)行的功能是:把薪水超過(guò)3萬(wàn)6千元的員工(employee)記錄字體顏色用栗色(Maroon)標(biāo)出來(lái)。
    第2種 如何動(dòng)態(tài)改變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;
    上述代碼執(zhí)行的功能是:把薪水超過(guò)3萬(wàn)6千元的員工(employee)記錄背景用白色(White)標(biāo)出來(lái)。
    第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;
    上述代碼執(zhí)行的功能是:把薪水超過(guò)4萬(wàn)的員工(employee)記錄背景用黑色(White)標(biāo)出來(lái)而文本用白色標(biāo)出來(lái)。
    就是這樣方便,因?yàn)槟闶褂玫氖荄elphi,這句像在為Borland作廣告了,呵呵,我的程序在Delphi7+Winxp和Delphi+Windows2000上編譯通過(guò),大家不妨一試。