Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Прокрутка ScrollBox посредством колеса мыши [D7, WinXP]


kyn66 ©   (2007-03-13 17:40:00) 

Уважаемые, каким образом прикрутить САБЖ? Что нужно написать в событии MouseWheel?


kyn66   (2007-03-14 15:07:00) [1]


> Это решается путём проверки координат курсора, находится
> ли он в пределах ScrollBox.


Да, действительно, так и нужно сделать, а скрол прикрутить к форме и все


TRUNK   (2007-03-14 13:15:00) [2]

> Что значит показывает что событие обработано?

Сообщение WM_MOUSEWHEEL отличается от большинства других сообщений тем, что если оно не обработано в одном окне,
то оно пересылается его родительскому окну и так далее, пока не будет найдено окно, которое его обработает.

> Я пытался  в рантайм создавать на панели ScrollBox, событие ему onMouseWhell,
> затем кучу картинок на него. Но когда кручу на всем этом колесом - никакой реакции

Если покопаться в исходниках, то можно увидеть, что все контролы пересылают это сообщение форме,
которой они принадлежат.

> Неудобно в том плане, что скролировать можно в любом месте
> формы и на любом элементе

Это решается путём проверки координат курсора, находится ли он в пределах ScrollBox.


kyn66   (2007-03-14 09:48:00) [3]

C шифтом понятно, классно, могет иногда и нужно будет применить. А вот насчет Handled не совсем ешшо. Пробовал иго и включать и выключать - разница показывается лишь при прокрутке картинок на ScrollBox-е . В первом случае они гладко прокручиваются , во втором - с замазыванием и быстро. Хотелось-бы поподробнее о Handled. Что значит показывает что событие обработано? Я пытался  в рантайм создавать на панели ScrollBox, событие ему onMouseWhell, затем кучу картинок на него. Но когда кручу на всем этом колесом - никакой реакции 8-(((. Получается тока на событии формы отлавливать если ScrollBox присутствует, то тогда его скролировать. Неудобно в том плане, что скролировать можно в любом месте формы и на любом элементе.


TRUNK   (2007-03-13 19:31:00) [4]

> [2] kyn66 © (13.03.07 18:47)
> А для чего нужны Handled и зачем проверять на ssShift ?

Handled для того что-бы показать, что событие обработано, что-бы оно не посылалось остальным окнам.
ssShift я добавил, что-бы при нажатом Shift прокрутка была по горизонтали, но если ненужно - можно убрать.


kyn66   (2007-03-13 18:47:00) [5]

А для чего нужны Handledи зачем проверять на ssShift?


TRUNK   (2007-03-13 18:25:00) [6]

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;


Наверх

Титульная страница Поиск, карта сайта Написать письмо