Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

DoMouseWheel [D2005, XP]


DFT ©   (2008-04-16 13:52:00) 

Здравствуйте! Подскажите пожалуйста.

В наследнике класса TControl  я перекрыл функцию DoMouseWheel следующим образом:

function TyClass.DoMouseWheel(Shift: TShiftState; WheelDelta: Integer;
     MousePos: TPoint): Boolean;
begin
 CellSize:=CellSize+WheelDelta;
 Result:= inherited DoMouseWheel(Shift,WheelDelta,MousePos);
 Invalidate;
end;

Но при этом никакой реакции при прокрутке колеса мыши не происходит. Пробовал установть точку прерывания в этом коде, никакой реакции при прогоне программы (т.е., останова не происходит).


Ins   (2008-04-16 15:56:00) [1]


> DFT   (16.04.08 14:26) [7]

Вы ответы принципиально не читаете? Или что-то не ясно, тогда стоит переспросить, уточнить ;)


Сергей М.   (2008-04-16 14:29:00) [2]


> сообщение до моего компонента почему-то не доходит


Потому что никто это сообщение твоему компоненту не посылает.


DFT   (2008-04-16 14:26:00) [3]

попробовал непосредственно обработать сообщение в насдеднике...

Private
procedure WMMOUSEWHELL(var msg: TMessage); message CM_MOUSEWHEEL;

procedure TMyClass.WMMOUSEWHELL(var msg: TMessage);
begin
 FCellSize:=FCellSize+1;
 invalidate;
end;


все равно сообщение до моего компонента почему-то не доходит


Ins   (2008-04-16 14:11:00) [4]


> тем не менее события OnMouseDown, Up, Click, он обрабатывает.
> ..?

Дело в том, что оконный родитель, получив сообщение мыши, сначала пытается найти в указанной точке графический контрол, и если он там есть - перенаправляет сообщение ему. Иначе - обрабатывает сам. Но сам графический контрол не способен получать сообщения от операционной системы непосредственно, только если оконный родитель ему это сообщение явно переправит.


Сергей М.   (2008-04-16 14:11:00) [5]

Такое решение принимается оконным объектом-контейнером, которому принадлежит безоконный объект.


Ins   (2008-04-16 14:08:00) [6]

Насколько я знаю, WM_MOUSEWHELL приходит только окну, которое находится в фокусе. Ваш контрол, разумеется, в фокусе никогда не будет, но вот его родитель - вполне. И тогда возможно DoMouseWheel будет вызываться. Попробуйте в обработчике MouseDown вызвать Parent.SetFocus;


DFT   (2008-04-16 14:07:00) [7]

тем не менее события OnMouseDown, Up, Click, он обрабатывает...?


Сергей М.   (2008-04-16 14:02:00) [8]

Потому что TGraphicControl не имеет своего окна.


DFT   (2008-04-16 13:53:00) [9]

ошибся. В наследнике TGraphicControl, а не Tcontrol


Наверх

Титульная страница Поиск, карта сайта Написать письмо