Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.12.20;
Скачать: CL | DM;

Вниз

Как в DBGrid отловить MouseWheel?   Найти похожие ветки 

 
Alex_C   (2008-12-10 14:43) [0]

События OnMouseWheel у DBGrid нет. Как отловить?


 
KilkennyCat ©   (2008-12-10 14:45) [1]

Как и в любом другом компоненте.


 
Alex_C   (2008-12-10 15:07) [2]

Как в другом не получается.
procedure CMMouseWheel(var Message: TCMMouseWheel); message CM_MOUSEWHEEL;
вот при использовании колесика мышки в Memo - попадаем в эту ф-цию, а вот в DBGrid - нет.


 
Dimka Maslov ©   (2008-12-10 15:58) [3]

события от движения мыши и нажатия кнопок направляются в то окно, над которым расположен курсор, но события от колеса мыши посылаются в активное окно (как и события от клавиатуры).


 
DVM ©   (2008-12-10 23:55) [4]


> Alex_C

Отловить то можно, но работать оно все равно будет не ахти.


 
Германн ©   (2008-12-11 01:01) [5]


> DVM ©   (10.12.08 23:55) [4]
>
>
> > Alex_C
>
> Отловить то можно, но работать оно все равно будет не ахти.
>
>

Почему "не ахти"?


 
DVM ©   (2008-12-11 10:52) [6]


> Германн ©   (11.12.08 01:01) [5]

Да как то странно работает. Сколько не пытался прикрутить - не выходит как надо. В результате плюнул на это.
В идеале, хотелось бы, чтобы при прокрутке колесиком происходили все те же действия, что при нажатии стрелок вверх, вниз на клавиатуре. Т.е и текущая выбранная строка менялась и грид прокручивался при необходимости. Такого поведения мне добиться не удалось. Либо одно работает, либо другое. Возможно делал я не так.


 
DVM ©   (2008-12-11 11:01) [7]


> Германн ©   (11.12.08 01:01) [5]

Проще всего повесить на OnMessage TApplicationEvents следующее:

procedure TfrmMain.ApplicationEvents1Message(var Msg: tagMSG;
 var Handled: Boolean);
begin
 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;
end;

Ну можно еще проверку ввести, что грид в фокусе и т.д. Оно работает. Но почему то не всегда. Иногда перестает. Т.е грид прокручивается, а вот перемещения по записям уже не происходит.


 
Германн ©   (2008-12-12 00:46) [8]


> DVM ©   (11.12.08 10:52) [6]
>
>
> > Германн ©   (11.12.08 01:01) [5]
>
> Да как то странно работает.


> Т.е грид прокручивается, а вот перемещения по записям уже
> не происходит.
>

А с чего бы возникло бы "перемещение по записям"? Будет свободная минутка посмотри генофонд. И узри что в TDBGrid не переопределён ни один метод связанный с колесом мышки. Они просто унаследованы без изменений у TCustomGrid. А TCustomGrid, как ты сам понимаешь, знать ничего не знает о каких-то там "наборах данных".


 
DVM ©   (2008-12-12 10:38) [9]


> А с чего бы возникло бы "перемещение по записям"?

я бы понял, если бы оно вообще не возникало, а ведь возникает но не всегда. Вот это странно. Кстати, раз уж зашел разговор, я еще раз не поленился, посмотрел и придумал вроде надежный способ:

Так:

type
 TMyClass = class(TControl);

procedure TfrmMain.DBGridNewProc(var Message: TMessage);
var
 d: short;
begin
 if (Message.Msg = WM_MOUSEWHEEL) then
   begin
     d := HIWORD(Message.wParam);
     d := d div WHEEL_DELTA;
     DbGrid1.DataSource.DataSet.MoveBy(-d)
   end
 else
   TMyClass(DBGrid1).WndProc(Message);
end;

Ну и в

procedure TfrmMain.FormCreate(Sender: TObject);
begin
 DBGrid1.WindowProc := DBGridNewProc;
end;



Страницы: 1 вся ветка

Текущий архив: 2009.12.20;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.013 c
1-1229363181
mm_ash
2008-12-15 20:46
2009.12.20
Package InitUnit Table Bug


4-1225346049
xCode
2008-10-30 08:54
2009.12.20
CreateUserProcess


2-1257141072
V
2009-11-02 08:51
2009.12.20
TVirtualDrawTree не отображать некоторые узлы дерева


2-1256792265
d@nger
2009-10-29 07:57
2009.12.20
Транзакция в TFIBdataset


1-1229527638
Afonya
2008-12-17 18:27
2009.12.20
Работа с окном другого приложения