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

Вниз

DoMouseWheel   Найти похожие ветки 

 
DFT   (2008-04-16 13:52) [0]

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

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

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

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


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

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


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

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


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

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


 
Ins ©   (2008-04-16 14:08) [4]

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


 
Ins ©   (2008-04-16 14:11) [5]


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

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


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

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


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

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

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

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


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


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


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


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


 
Ins ©   (2008-04-16 15:56) [9]


> DFT   (16.04.08 14:26) [7]

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



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

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

Наверх




Память: 0.48 MB
Время: 0.02 c
15-1207028851
Alien1769
2008-04-01 09:47
2008.05.18
Delphimaster выкупает один представитель...


2-1208931778
kuzulis
2008-04-23 10:22
2008.05.18
Как узнать что создалась и существует кнопка?


15-1207544272
Игорь Шевченко
2008-04-07 08:57
2008.05.18
McSimm, с днем рождения!


15-1207643753
samalex
2008-04-08 12:35
2008.05.18
Кодировка почтового сообщения


15-1206900897
DVM
2008-03-30 22:14
2008.05.18
2 копии Win на одном компьютере и перевод времени.