DBGrid 預設不響應滑鼠滾輪,需自行實現垂直捲動。
FARPROC OldProc = NULL;
LRESULT CALLBACK DBGridProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
if (uMsg == WM_MOUSEWHEEL) {
if ((short)HIWORD(wParam) > 0)
PostMessage(hWnd, WM_VSCROLL, SB_LINEUP, 0);
else
PostMessage(hWnd, WM_VSCROLL, SB_LINEDOWN, 0);
}
return CallWindowProc(OldProc, hWnd, uMsg, wParam, lParam);
}
void __fastcall TMainForm::FormShow(TObject *Sender)
{
// ... 連線資料庫 ...
OldProc = (FARPROC)SetWindowLong(DBGrid->Handle, GWL_WNDPROC, (LONG)DBGridProc);
}
void __fastcall TMainForm::FormClose(TObject *Sender, TCloseAction &Action)
{
SetWindowLong(DBGrid->Handle, GWL_WNDPROC, (LONG)OldProc);
// ... 斷線 ...
}
用 `SetWindowLongPtr`/`GetWindowLongPtr`、`LONG_PTR`、`GWLP_WNDPROC` 替代,避免指標截斷。