Главная страница
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.069 c
2-1177431055
Oleg_teacher
2007-04-24 20:10
2007.05.13
Обьединит файлы


2-1177342420
ppcumax
2007-04-23 19:33
2007.05.13
RichEdit


15-1176568483
GeLLeR
2007-04-14 20:34
2007.05.13
Не могу установить C++ Builder


2-1177360993
Jeeb
2007-04-24 00:43
2007.05.13
База Аксес


11-1153722586
StRaNNiK
2006-07-24 10:29
2007.05.13
Как связать TrayIcon c PopupMenu в KOL?