不過還好,在DBGrdIEh的OptionsEh中,我們可以發現有個dghDblClickOptimizeColWidth選項,可以讓用戶在欄頭的寬度調整位置上,雙擊鼠標以自動調整欄寬度。
既然該功能已經實現,但卻沒能在DBGridEh發布的方法中找到該方法,經過筆者嘗試,已經找到該方法,只要把它發布出來即可使用。具體過程如下:
首先我們找到DBGridEh.hpp文件,並且備份,
根據dghDblClickOptimizeColWidth的線索,我們在DBGridEh.pas中全文查找該關鍵字,在10514行中,找到以下代碼段:
//
if (AGridState = gsColSizing) and (dghDblClickOptimizeColWidth in OptionsEh) then
OptimizeSelectedColsWidth(Columns[ASizingIndex - IndicatorOffset])
//
那麼看來OptimizeSelectedColsWidth(TColumnEh* WithColumn)函數就是我們要的了!
在頭文件DBGridEh.hpp中查找OptimizeSelectedColsWidth函數名,在1859行找到以下聲明
void __fastcall OptimizeSelectedColsWidth(TColumnEh* WithColumn);
它是放在protected域中,我們注釋掉改行,復制,並在public域中粘帖該聲明,
於是OptimizeSelectedColsWidth就發布了。
因為我們沒有修改pas源碼部分,因此,無需重新編譯,即可使用。
注意,該函數傳遞TColumnEh的指針,我們只要遍歷DBGridEh的Column所有對象指針,即可調整完整個表格的Column寬度。
以下為使用實例:
for(int i=0;i<sDBGridEh->Columns->Count;i++ )
sDBGridEh->OptimizeSelectedColsWidth((TColumnEh *)sDBGridEh->Columns->Items[i]);