Форум: "Начинающим";
Текущий архив: 2008.05.18;
Скачать: [xml.tar.bz2];
Вниз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]попробовал непосредственно обработать сообщение в насдеднике...
Privateprocedure 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.1 c