DBGRID и колесо мыши
DBGRID и колесо мыши
DBGRID и колесо мыши При вращении колесика мыши "в dbgrid" происходит перемещение полоски выбора по строкам таблицы без перемещения по записям, т.е. перехода от записи к записи нет. Мало того, если покрутить колёсико, а потом осуществить маусклик выбирается случайная запись в пределах видимой части таблицы, в предыдущей строке также остается значок текущей записи в виде треугольника, но и новый также появляется, в результате можно загадить таким графическим мусором всю таблицу. Прокрутка осуществляется только в видимой части dbgrid. Такая фигня происходит со стандартным драйвером мыши microsoft, мыши от logitech, разных моделей. Если поставить родные драйвера, при установках по умолчанию, характер скролинга меняется, полоска выбора сразу скачет вниз(или вверх, смотря куда крутить) видимой части таблицы и далее смещается по одной записи. Если же в драйверах включить "совместимость со скролингом МС оффиса" происходит описаная выше фигня. Обработки события mousewheel ни у dbgrid ни у table я не нашел... p.s. Извиняюсь за сумбурность изложения. -------------------------------------------------------------------------------- sniknik (c) (10.04.03 13:26) может это решит часть проблемы описываем: type twmmousewheel = packed record msg: cardinal; keys: smallint; wheeldelta: smallint; case integer of 0: ( xpos: smallint; ypos: smallint); 1: ( pos: tsmallpoint; result: longint); end; tmydbgrid = class(tdbgrid) procedure wmmousewheel(var message: twmmousewheel); message wm_mousewheel; private ......... procedure tmydbgrid.wmmousewheel(var message: twmmousewheel); begin if datasource.dataset.active then begin if message.wheeldelta > 10 then datasource.dataset.prior; if message.wheeldelta < -10 then datasource.dataset.next; end; end; вызываем примерно так: procedure tmainform.formcreate(sender: tobject); begin dbgrid:= tmydbgrid.create(tabsheet1); dbgrid.parent:= tabsheet1; dbgrid.align:= alclient; dbgrid.borderstyle:= bsnone; dbgrid.datasource:= datasource1; dbgrid.ondblclick:= dbgriddblclick; dbgrid.onkeypress:= dbgridkeypress; dbgrid.ontitleclick:= dbgridtitleclick; dbgrid.popupmenu:= popupmenu3; end; *************************************************************** O прокрутке колесом мыши. Bот решение: (это обработчик события OnMessage компонента TAppicationEvents) Код: // если в фокусе подопытный грид... if Grid.Focused then // ... и получено сообщение о прокрутке колеса if Msg.message = WM_MOUSEWHEEL then begin // подменяем это событие на нажатие кнопки Msg.message := WM_KEYDOWN; // дальше, я думаю, все понятно Msg.lParam := 0; if Msg.wParam > 0 then Msg.wParam := VK_UP else Msg.wParam := VK_DOWN; Handled := False; end;