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

Вниз

Прокрутка 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.054 c
2-1177008478
Quattro
2007-04-19 22:47
2007.05.13
создание TIdAttachment


2-1177312593
vitv
2007-04-23 11:16
2007.05.13
Ошибка при передаче параметра в запрос


15-1176037360
Nic (ro)
2007-04-08 17:02
2007.05.13
Siemens A50


15-1176497172
Petr V.Abramov
2007-04-14 00:46
2007.05.13
Не обос<по большому>ся бы... :)


3-1171977767
ALS
2007-02-20 16:22
2007.05.13
Запись boolean в MS Access