人們在利用Delphi開發數據庫應用程序時經常使用表格控件制作報表靈活地使用表格控件的OnDrawCell事件可以完成一些特殊效果的顯示能更好地滿足用戶需求本文介紹靈活使用OnDrawCell事件的三個技巧
動態更新表格行的顏色
有時需要在報表中動態更新表格行的顏色例如在供應商列表中優先供貨的供應商用綠色顯示其他的供應商用紅色顯示此時可以在OnDrawCell事件中用如下代碼實現
if TableFieldByName(CustNo)AsInteger > then
DBGridCanvasFontColor := clRed;
DBGridDefaultDrawColumnCell(Rect DataCol
Column State)
上述的代碼可以根據應用的需要進行擴充例如需要用黑體顯示時只要將對應行改為
DBGrid
Canvas
Font
Style := [fsBold];
在表格中插入其他可視控件
在數據庫編程中外鍵約束是保證數據庫中的數據按用戶要求存放的有效方法例如在一個訂單處理環境中訂單表和客戶表之間就存在外鍵約束即訂單表中的每條記錄在客戶表中應該有對應項這樣在填寫訂單表時如果在輸入焦點提供客戶列表供用戶選擇將有效地保證數據的正確性
DBGrid控件和StringGrid控件都派生於TcustomGrid其中DBGrid控件可以輸入數據Delphi對DBGrid處理的內部機制是在網格上浮動一個DBEdit控件能夠獲得焦點輸入數據的網格其實是浮動的DBEdit控件當焦點轉移時把編輯框中的文字顯示到表格其他未獲得焦點地方和StingGrid並沒有區別這樣就達到了在表格上輸入數據的目的所以在表格中插入其他可視控件的方法就是在網格上浮動該可視控件因此從原理上講任何控件都可以在表格中插入本文以在表格中插入下拉框為例介紹在網格上插入其他控件的具體步驟
.設置屬性
讀入客戶列表到下拉框的Items屬性
.設置OnDrawCell事件
OnDrawCell事件在繪制表格的單元格時被觸發當獲得焦點的單元格所對應的字段與下拉框所對應的字段一致時移動下拉框到獲得焦點的網格上並且使下拉框可見從而達到在表格指定列上顯示下拉框的功能設置表格的OnDrawCell事件如下
if (gdFocused in State) then
begin
//對應字段一致則執行
if (GridCells[ACol]=Company) then
begin
//移動下拉框到指定位置
ComboBoxLeft := RectLeft + GridLeft;
ComboBoxTop := RectTop + Gridtop;
ComboBoxWidth :=RectRight-RectLeft;
ComboBoxHeight:=RectBottom-RectTop;
// 使下拉框可見並獲得焦點
ComboBoxVisible := True;
ComboBoxSetFocus;
end;
end;
[] [] []
From:http://tw.wingwit.com/Article/program/Delphi/201311/24771.html