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

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

Правильный Scroll Box


GuAV ©   (2005-10-21 14:39:00) 

На прокручивание колеса мыши в многосторчном edit'е, richedit'e или twebbrowser'e реагируют скролбары. При нажатии на колесо появляется круг со стрелками, двигая мышь можно прокручивать контент в ныжном направлении и с нужной скоростью.

Подозреваю, что все эти фичи реализованы в windows api и готовы быть использованы в своём контроле. Однако, нет никаких идей, как найти это в MSDN.

Обычный scrollbox такой функциональностью не обладает. Как наделить свой контрол такой функциональностью ?

Буду рад ссылке на соответствующие функции/сообщения/ect, или примеру своего контрола, особенно примеру "самоделнього" memo на delphi с такой прокруткой.


Игорь Шевченко   (2005-10-24 17:54:00) [1]

GuAV ©   (24.10.05 17:47) [10]


> Как Вы про неё узнали ?


Узнал по набору функций, эскпортируемых из user32.dll
и еще, то ли в wine, то ли в ReactOS был разговор.


> Она хоть в SDK объявлена ?


Нет.


GuAV   (2005-10-24 17:47:00) [2]


> Игорь Шевченко ©


Спасибо. Работает.

PS: Как Вы про неё узнали ? Она хоть в SDK объявлена ?


Игорь Шевченко   (2005-10-24 11:21:00) [3]

GuAV ©   (21.10.05 21:32) [8]

Для WinXP и выше:
В ответ на сообщение WM_MBUTTONDOWN нужно вызвать
EnterReaderModeHelper (Wnd: HWND): BOOL; stdcall; из user32.dll
В качестве wnd передать свое окно.


GuAV   (2005-10-21 21:32:00) [4]

После исследований выяснилось:
Для ListBox и Memo, для RichEdit и для WebBrowser - три различных реализации этой фичи.
Поведение во всех случаях различно.
Картинки и курсоры хранятся в COMCTL32.DLL, riched20.dll, mfc70.dll и других файлах, при этом самого круга нигде нет, видимо рисуется коммандами gdi.
Класс окна для ListBox и Memo определился как User32_ReaderMode, создать не получилось, для RichEdit это вообще не окно.

Короче, видимо есть только один путь - делать всё самому (можно только картинок и курсоров надёргать). Sad but true.


Leonid Troyanovsky   (2005-10-21 18:08:00) [5]


> clickmaker ©   (21.10.05 17:18) [6]

> >  При нажатии колеса в стандартных ListBox,
> > Memo,  RichEdit, twebbrowser при наличии вертикального
> scrollbar'а
> > курсор меняется и появляется круг со стрелками
>
> ну это на уровне апи. Все эти контролы - обертки для зарегистрированных
> в системе окон. Создай контрол на основе своего окна со
> стилем WM_VSCROLL и будет у тебя то же самое


Не думаю. Скажем, форма или TScrollBox на это не реагируют.
Скорее всего, эти классы окон должны как-то (где-то) регистрироваться.

--
Regards, LVT.


clickmaker   (2005-10-21 17:18:00) [6]


>  При нажатии колеса в стандартных ListBox,
> Memo,  RichEdit, twebbrowser при наличии вертикального scrollbar'а
> курсор меняется и появляется круг со стрелками

ну это на уровне апи. Все эти контролы - обертки для зарегистрированных в системе окон. Создай контрол на основе своего окна со стилем WM_VSCROLL и будет у тебя то же самое


GuAV   (2005-10-21 17:11:00) [7]


> clickmaker ©

>Leonid Troyanovsky ©


Спасибо вам за ответы, но это не полностью отвечает на мой вопрос. При нажатии колеса в стандартных ListBox,
Memo,  RichEdit, twebbrowser при наличии вертикального scrollbar'а курсор меняется и появляется круг со стрелками; можно, двигая мышь, прокручивать текст в разные стороны и с разными скоростями; и я подозреваю, что можно заставить windows делать это же для своего контрола, или, хотя бы получить эти символы и курсоры.


Leonid Troyanovsky   (2005-10-21 15:38:00) [8]


> GuAV ©   (21.10.05 15:25) [2]

> > clickmaker ©   (21.10.05 14:48) [1]

> Обработка этого сообщения позволит только обрабатывать прокрутку
> колеса; мне нужна


У TControl есть protected methods

   function DoMouseWheel
   function DoMouseWheelDown
   function DoMouseWheel

переопредели их. Вот, собс-но, и все.

--
Regards, LVT.


clickmaker   (2005-10-21 15:30:00) [9]

нажатие колеса - WM_MBUTTONDOWN


GuAV   (2005-10-21 15:25:00) [10]


> clickmaker ©   (21.10.05 14:48) [1]


Обработка этого сообщения позволит только обрабатывать прокрутку колеса; мне нужна также стандартная реакцция на нажатие колеса. Такая же, как, например в ObjectInspector, в котором не помещаются все свойства и отображён ScrollBar.


clickmaker   (2005-10-21 14:48:00) [11]

WM_MOUSEWHEEL


Наверх

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