![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
прокрутка DBGrid колесом мыши [D7, XP]
aleko © (2006-09-27 00:27:00)Доброго времени суток, уважаемые мастера, подскажите как прокрутить сетку DBGrid при помощи колеса мыши?
Пробовал написать процедуру перехвата сообщения WM_MOUSEWHEEL и в зависимости от направления вращения колеса осуществлять переход в наборе данных Тable на соотвественно предыдущую или следующую строку - это работает, но только до тех пор пока я не щелкну по какой нибудь ячейке сетки - потом перемещается только выделение, а переход по записям не происходит, почему? Можно конечно сделать DBGrid неактивной или что-то в этом роде, тогда все нормально, но ведь это не выход.
aleko (2006-09-27 03:51:00) [1]Спасибо. Нашел в Королевстве ответ - работает, привожу, может кому пригодится.
Подскажите что именно происходит при FormCreate, никак не могу врубиться? Сорри за идиотский вопрос, но хочется разобраться :)
type
TForm1 = class(TForm)
...
private
{ Private declarations }
procedure NewGridWinProc(var Msg: TMessage);
...
end;
implementation
var
OldGridWinProc: TWndMethod;
procedure TForm1.FormCreate(Sender: TObject);
begin
...
OldGridWinProc := DBGrid1.WindowProc;
DBGrid1.WindowProc := NewGridWinProc;
...
end;
procedure TForm1.NewGridWinProc(var Msg: TMessage);
begin
if Msg.Msg = WM_MOUSEWHEEL then begin
if SmallInt(HiWord(Msg.wParam)) > 0
then DBGrid1.DataSource.DataSet.Prior
else DBGrid1.DataSource.DataSet.Next;
Msg.Result := 1;
end else OldGridWinProc(Msg);
end;
Германн (2006-09-27 00:34:00) [2]Переходи на BDS2006. Там сей баг исправлен. Или посмотри реализацию в TRxDbGrid методов DoOnMouseWheelDown и DoOnMouseWheelUp и сделай у себя так же.