Форум: "Основная";
Текущий архив: 2007.05.13;
Скачать: [xml.tar.bz2];
ВнизПрокрутка ScrollBox посредством колеса мыши Найти похожие ветки
← →
kyn66 © (2007-03-13 17:40) [0]Уважаемые, каким образом прикрутить САБЖ? Что нужно написать в событии MouseWheel ?
← →
TRUNK © (2007-03-13 18:25) [1]
procedure TForm1.FormMouseWheel(Sender: TObject; Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
begin
Handled := true;
if (WheelDelta > 0) then
WheelDelta := 10
else
if (WheelDelta < 0) then
WheelDelta := -10
else
Exit;
if (ssShift in Shift) then
ScrollBar1.HorzScrollBar.Position := ScrollBar1.HorzScrollBar.Position - WheelDelta
else
ScrollBar1.VertScrollBar.Position := ScrollBar1.VertScrollBar.Position - WheelDelta;
end;
← →
kyn66 © (2007-03-13 18:47) [2]А для чего нужны Handled и зачем проверять на ssShift ?
← →
TRUNK © (2007-03-13 19:31) [3]> [2] kyn66 © (13.03.07 18:47)
> А для чего нужны Handled и зачем проверять на ssShift ?
Handled для того что-бы показать, что событие обработано, что-бы оно не посылалось остальным окнам.
ssShift я добавил, что-бы при нажатом Shift прокрутка была по горизонтали, но если ненужно - можно убрать.
← →
kyn66 © (2007-03-14 09:48) [4]C шифтом понятно, классно, могет иногда и нужно будет применить. А вот насчет Handled не совсем ешшо. Пробовал иго и включать и выключать - разница показывается лишь при прокрутке картинок на ScrollBox-е . В первом случае они гладко прокручиваются , во втором - с замазыванием и быстро. Хотелось-бы поподробнее о Handled. Что значит показывает что событие обработано? Я пытался в рантайм создавать на панели ScrollBox, событие ему onMouseWhell, затем кучу картинок на него. Но когда кручу на всем этом колесом - никакой реакции 8-(((. Получается тока на событии формы отлавливать если ScrollBox присутствует, то тогда его скролировать. Неудобно в том плане, что скролировать можно в любом месте формы и на любом элементе.
← →
TRUNK © (2007-03-14 13:15) [5]> Что значит показывает что событие обработано?
Сообщение WM_MOUSEWHEEL отличается от большинства других сообщений тем, что если оно не обработано в одном окне,
то оно пересылается его родительскому окну и так далее, пока не будет найдено окно, которое его обработает.
> Я пытался в рантайм создавать на панели ScrollBox, событие ему onMouseWhell,
> затем кучу картинок на него. Но когда кручу на всем этом колесом - никакой реакции
Если покопаться в исходниках, то можно увидеть, что все контролы пересылают это сообщение форме,
которой они принадлежат.
> Неудобно в том плане, что скролировать можно в любом месте
> формы и на любом элементе
Это решается путём проверки координат курсора, находится ли он в пределах ScrollBox.
← →
kyn66 © (2007-03-14 15:07) [6]
> Это решается путём проверки координат курсора, находится
> ли он в пределах ScrollBox.
Да, действительно, так и нужно сделать, а скрол прикрутить к форме и все
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2007.05.13;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.043 c