Strona podana przez
Corvis'a ma płatny dostęp, więc za darmo z niej nie skorzystasz. Poza tym sposób polegający na wykorzystaniu przechwytywania komunikatów nie jest tutaj akurat najlepszy.
Proste rozwiązanie. Tworzysz dla obiektu
DBGrid1 trzy zdarzenia
OnMouseMove,
OnMouseWheelDown i
OnMouseWheelUp, a następnie umieszczasz w nich taki kod:
void __fastcall TForm1::DBGrid1MouseMove(TObject *Sender, TShiftState Shift,
int X, int Y) /* OnMouseMove */
{
if(GetFocus() != DBGrid1->Handle)
{
DBGrid1->SetFocus();
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::DBGrid1MouseWheelDown(TObject *Sender, TShiftState Shift,
TPoint &MousePos, bool &Handled) /* OnMouseWheelDown */
{
DBGrid1->Perform(WM_VSCROLL, 1, 0);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::DBGrid1MouseWheelUp(TObject *Sender, TShiftState Shift,
TPoint &MousePos, bool &Handled) /* OnMouseWheelUp */
{
DBGrid1->Perform(WM_VSCROLL, 0, 0);
}
Ten kod działa u mnie prawidłowo. Niestety nie wiem, czy w Twojej wersji środowiska występuje metoda
GetFocus(), oraz czy
TDBGrid obsługuje zdarzenia
OnMouseWheel... Jeżeli nie to podaj co nie działa, a poszukam innego rozwiązania.