彩色方式顯示DBGrid

 Delphi中數據控制構件DBGrid是用來反映數據表的最重要、也是最常用的構件。在應用程序中,如果以彩色的方式來顯示DBGrid,將會增加其可視性,尤其在顯示一些重要的或者是需要警示的數據時,可以改變這些數據所在的行或列的前景和背景的顏色。    
    DBGrid屬性DefaultDrawing是用來控制Cell(網格)的繪製。若DefaultDrawing的缺省設置爲True,意思是Delphi使用DBGrid的缺省繪製方法來製作網格和其中所包含的數據,數據是按與特定列相連接的Tfield構件的DisplayFormat或EditFormat特性來繪製的;若將DBGrid的DefaultDrawing特性設置成False,Delphi就不繪製網格或其內容,必須自行在TDBGrid的OnDrawDataCell事件中提供自己的繪製例程(自畫功能)。    
   
    在這裏將用到DBGrid的一個重要屬性:畫布Canvas,很多構件都有這一屬性。Canvas代表了當前被顯示DBGrid的表面,你如果把另行定義的顯示內容和風格指定給DBGrid對象的Canvas,DBGrid對象會把Canvas屬性值在屏幕上顯示出來。具體應用時,涉及到Canvas的Brush屬性和FillRect方法及TextOut方法。Brush屬性規定了DBGrid.Canvas顯示的圖像、顏色、風格以及訪問Windows   GDI   對象句柄,FillRect方法使用當前Brush屬性填充矩形區域,方法TextOut輸出Canvas的文本內容。    
   
    以下用一個例子來詳細地說明如何顯示彩色的DBGrid。在例子中首先要有一個DBGrid構件,其次有一個用來產生彩色篩選條件的SpinEdit構件,另外還有ColorGrid構件供自由選擇數據單元的前景和背景的顏色。    
   
    1.建立名爲ColorDBGrid的Project,在其窗體Form1中依次放入所需構件,並設置屬性爲相應值,具體如下所列:    
       Table1   DatabaseName:   DBDEMOS    
  TableName:   EMPLOYEE.DB    
  Active:   True;    
    DataSource1   DataSet:   Table1    
    DBGrid1   DataSource1:   DataSource1    
  DefaultDrawing:   False    
    SpinEdit1   Increment:200    
  Value:   20000    
    ColorGrid1   GridOrdering:   go16*1    
   
    2.爲DBGrid1構件OnDrawDataCell事件編寫響應程序:    
    procedure   TForm1.DBGrid1DrawDataCell(Sender:   TObject;   const   Rect:   TRect;Field:   TField;   State:   TGridDrawState);    
    begin    
       if   Table1.Fieldbyname(′Salary′).value<=SpinEdit1.value   then    
       DBGrid1.Canvas.Brush.Color:=ColorGrid1.ForeGroundColor    
       else    
       DBGrid1.Canvas.Brush.Color:=ColorGrid1.BackGroundColor;    
       DBGrid1.Canvas.FillRect(Rect);    
       DBGrid1.Canvas.TextOut(Rect.left+2,Rect.top+2,Field.AsString);    
    end;    
   
    這個過程的作用是當SpinEdit1給定的條件得以滿足時,如′salary′變量低於或等於SpinEdit1.Value時,DBGrid1記錄以ColorGrid1的前景顏色來顯示,否則以ColorGrid1的背景顏色來顯示。然後調用DBGrid的Canvas的填充過程FillRect和文本輸出過程重新繪製DBGrid的畫面。    
   
    3.爲SpinEdit1構件的OnChange事件編寫響應代碼:    
    procedure   TForm1.SpinEdit1Change(Sender:   TObject);    
    begin    
       DBGrid1.refresh;    
    end;    
   
    當SpinEdit1構件的值有所改變時,重新刷新DBGrid1。    
   
    4.爲ColorGrid1的OnChange事件編寫響應代碼:    
    procedure   TForm1.ColorGrid1Change(Sender:   TObject);    
    begin    
       DBGrid1.refresh;    
   end;    
   
    當ColorGrid1的值有所改變時,即鼠標的右鍵或左鍵單擊ColorGrid1重新刷新DBGrid1。    
   
    5.爲Form1窗體(主窗體)的OnCreate事件編寫響應代碼:    
    procedure   TForm1.FormCreate(Sender:   TObject);    
    begin    
       ColorGrid1.ForeGroundIndex:=9;    
       ColorGrid1.BackGroundIndex:=15;    
    end;    
   
    在主窗創建時,將ColorGrid1的初值設定前景爲灰色,背景爲白色,也即DBGrid的字體顏色爲灰色,背景顏色爲白色。    
   
    6.現在,可以對ColorDBGrid程序進行編譯和運行了。當用鼠標的左鍵或右鍵單擊ColorGrid1時,DBGrid的字體和背景顏色將隨之變化。    
   
    在本文中,只是簡單展示了以彩色方式顯示DBGrid的原理,當然,還可以增加程序的複雜性,使其實用化。同樣道理,也可以將這個方法擴展到其他擁有Canvas屬性的構件中,讓應用程序的用戶界面更加友
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章