Delphi中數(shù)據(jù)控制構(gòu)件DBGrid是用來反映數(shù)據(jù)表的最重要、也是最常用的構(gòu)件。在應(yīng)用程序中,如果以彩色的方式來顯示DBGrid,將會增加其可視性,尤其在顯示一些重要的或者是需要警示的數(shù)據(jù)時(shí),可以改變這些數(shù)據(jù)所在的行或列的前景和背景的顏色。
DBGrid屬性DefaultDrawing是用來控制Cell(網(wǎng)格)的繪制。若DefaultDrawing的缺省設(shè)置為True,意思是Delphi使用DBGrid的缺省繪制方法來制作網(wǎng)格和其中所包含的數(shù)據(jù),數(shù)據(jù)是按與特定列相連接的Tfield構(gòu)件的DisplayFormat或EditFormat特性來繪制的;若將DBGrid的DefaultDrawing特性設(shè)置成False,Delphi就不繪制網(wǎng)格或其內(nèi)容,必須自行在TDBGrid的OnDrawDataCell事件中提供自己的繪制例程(自畫功能)。
在這里將用到DBGrid的一個(gè)重要屬性:畫布Canvas,很多構(gòu)件都有這一屬性。Canvas代表了當(dāng)前被顯示DBGrid的表面,你如果把另行定義的顯示內(nèi)容和風(fēng)格指定給DBGrid對象的Canvas,DBGrid對象會把Canvas屬性值在屏幕上顯示出來。具體應(yīng)用時(shí),涉及到Canvas的Brush屬性和FillRect方法及TextOut方法。Brush屬性規(guī)定了DBGrid.Canvas顯示的圖像、顏色、風(fēng)格以及訪問Windows GDI 對象句柄,F(xiàn)illRect方法使用當(dāng)前Brush屬性填充矩形區(qū)域,方法TextOut輸出Canvas的文本內(nèi)容。
以下用一個(gè)例子來詳細(xì)地說明如何顯示彩色的DBGrid。在例子中首先要有一個(gè)DBGrid構(gòu)件,其次有一個(gè)用來產(chǎn)生彩色篩選條件的SpinEdit構(gòu)件,另外還有ColorGrid構(gòu)件供自由選擇數(shù)據(jù)單元的前景和背景的顏色。
1.建立名為ColorDBGrid的Project,在其窗體Form1中依次放入所需構(gòu)件,并設(shè)置屬性為相應(yīng)值,具體如下所列:
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構(gòu)件OnDrawDataCell事件編寫響應(yīng)程序:
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
DBGrid1.Canvas.Brush.Color:=ColorGrid1.BackGroundColor;
DBGrid1.Canvas.FillRect(Rect);
DBGrid1.Canvas.TextOut(Rect.left+2,Rect.top+2,Field.AsString);
end;
這個(gè)過程的作用是當(dāng)SpinEdit1給定的條件得以滿足時(shí),如′salary′變量低于或等于SpinEdit1.Value時(shí),DBGrid1記錄以ColorGrid1的前景顏色來顯示,否則以ColorGrid1的背景顏色來顯示。然后調(diào)用DBGrid的Canvas的填充過程FillRect和文本輸出過程重新繪制DBGrid的畫面。
3.為SpinEdit1構(gòu)件的OnChange事件編寫響應(yīng)代碼:
procedure TForm1.SpinEdit1Change(Sender: TObject);
begin
DBGrid1.refresh;
end;
當(dāng)SpinEdit1構(gòu)件的值有所改變時(shí),重新刷新DBGrid1。
4.為ColorGrid1的OnChange事件編寫響應(yīng)代碼:
procedure TForm1.ColorGrid1Change(Sender: TObject);
begin
DBGrid1.refresh;
end;
當(dāng)ColorGrid1的值有所改變時(shí),即鼠標(biāo)的右鍵或左鍵單擊ColorGrid1重新刷新DBGrid1。
5.為Form1窗體(主窗體)的OnCreate事件編寫響應(yīng)代碼:
procedure TForm1.FormCreate(Sender: TObject);
begin
ColorGrid1.ForeGroundIndex:=9;
ColorGrid1.BackGroundIndex:=15;
end;
在主窗創(chuàng)建時(shí),將ColorGrid1的初值設(shè)定前景為灰色,背景為白色,也即DBGrid的字體顏色為灰色,背景顏色為白色。
6.現(xiàn)在,可以對ColorDBGrid程序進(jìn)行編譯和運(yùn)行了。當(dāng)用鼠標(biāo)的左鍵或右鍵單擊ColorGrid1時(shí),DBGrid的字體和背景顏色將隨之變化。
在本文中,只是簡單展示了以彩色方式顯示DBGrid的原理,當(dāng)然,還可以增加程序的復(fù)雜性,使其實(shí)用化。同樣道理,也可以將這個(gè)方法擴(kuò)展到其他擁有Canvas屬性的構(gòu)件中,讓應(yīng)用程序的用戶界面更加友好。
DBGrid屬性DefaultDrawing是用來控制Cell(網(wǎng)格)的繪制。若DefaultDrawing的缺省設(shè)置為True,意思是Delphi使用DBGrid的缺省繪制方法來制作網(wǎng)格和其中所包含的數(shù)據(jù),數(shù)據(jù)是按與特定列相連接的Tfield構(gòu)件的DisplayFormat或EditFormat特性來繪制的;若將DBGrid的DefaultDrawing特性設(shè)置成False,Delphi就不繪制網(wǎng)格或其內(nèi)容,必須自行在TDBGrid的OnDrawDataCell事件中提供自己的繪制例程(自畫功能)。
在這里將用到DBGrid的一個(gè)重要屬性:畫布Canvas,很多構(gòu)件都有這一屬性。Canvas代表了當(dāng)前被顯示DBGrid的表面,你如果把另行定義的顯示內(nèi)容和風(fēng)格指定給DBGrid對象的Canvas,DBGrid對象會把Canvas屬性值在屏幕上顯示出來。具體應(yīng)用時(shí),涉及到Canvas的Brush屬性和FillRect方法及TextOut方法。Brush屬性規(guī)定了DBGrid.Canvas顯示的圖像、顏色、風(fēng)格以及訪問Windows GDI 對象句柄,F(xiàn)illRect方法使用當(dāng)前Brush屬性填充矩形區(qū)域,方法TextOut輸出Canvas的文本內(nèi)容。
以下用一個(gè)例子來詳細(xì)地說明如何顯示彩色的DBGrid。在例子中首先要有一個(gè)DBGrid構(gòu)件,其次有一個(gè)用來產(chǎn)生彩色篩選條件的SpinEdit構(gòu)件,另外還有ColorGrid構(gòu)件供自由選擇數(shù)據(jù)單元的前景和背景的顏色。
1.建立名為ColorDBGrid的Project,在其窗體Form1中依次放入所需構(gòu)件,并設(shè)置屬性為相應(yīng)值,具體如下所列:
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構(gòu)件OnDrawDataCell事件編寫響應(yīng)程序:
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
DBGrid1.Canvas.Brush.Color:=ColorGrid1.BackGroundColor;
DBGrid1.Canvas.FillRect(Rect);
DBGrid1.Canvas.TextOut(Rect.left+2,Rect.top+2,Field.AsString);
end;
這個(gè)過程的作用是當(dāng)SpinEdit1給定的條件得以滿足時(shí),如′salary′變量低于或等于SpinEdit1.Value時(shí),DBGrid1記錄以ColorGrid1的前景顏色來顯示,否則以ColorGrid1的背景顏色來顯示。然后調(diào)用DBGrid的Canvas的填充過程FillRect和文本輸出過程重新繪制DBGrid的畫面。
3.為SpinEdit1構(gòu)件的OnChange事件編寫響應(yīng)代碼:
procedure TForm1.SpinEdit1Change(Sender: TObject);
begin
DBGrid1.refresh;
end;
當(dāng)SpinEdit1構(gòu)件的值有所改變時(shí),重新刷新DBGrid1。
4.為ColorGrid1的OnChange事件編寫響應(yīng)代碼:
procedure TForm1.ColorGrid1Change(Sender: TObject);
begin
DBGrid1.refresh;
end;
當(dāng)ColorGrid1的值有所改變時(shí),即鼠標(biāo)的右鍵或左鍵單擊ColorGrid1重新刷新DBGrid1。
5.為Form1窗體(主窗體)的OnCreate事件編寫響應(yīng)代碼:
procedure TForm1.FormCreate(Sender: TObject);
begin
ColorGrid1.ForeGroundIndex:=9;
ColorGrid1.BackGroundIndex:=15;
end;
在主窗創(chuàng)建時(shí),將ColorGrid1的初值設(shè)定前景為灰色,背景為白色,也即DBGrid的字體顏色為灰色,背景顏色為白色。
6.現(xiàn)在,可以對ColorDBGrid程序進(jìn)行編譯和運(yùn)行了。當(dāng)用鼠標(biāo)的左鍵或右鍵單擊ColorGrid1時(shí),DBGrid的字體和背景顏色將隨之變化。
在本文中,只是簡單展示了以彩色方式顯示DBGrid的原理,當(dāng)然,還可以增加程序的復(fù)雜性,使其實(shí)用化。同樣道理,也可以將這個(gè)方法擴(kuò)展到其他擁有Canvas屬性的構(gòu)件中,讓應(yīng)用程序的用戶界面更加友好。