Вниз
Скачать: CL | DM;

Правильный Scroll Box   Найти похожие ветки 

← →
GuAV ©   (2005-10-21 14:39) [0]

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

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

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

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


← →
clickmaker ©   (2005-10-21 14:48) [1]

WM_MOUSEWHEEL


← →
GuAV ©   (2005-10-21 15:25) [2]


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


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


← →
clickmaker ©   (2005-10-21 15:30) [3]

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


← →
Leonid Troyanovsky ©   (2005-10-21 15:38) [4]


> 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.


← →
GuAV ©   (2005-10-21 17:11) [5]


> clickmaker ©

>Leonid Troyanovsky ©


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


← →
clickmaker ©   (2005-10-21 17:18) [6]


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

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


← →
Leonid Troyanovsky ©   (2005-10-21 18:08) [7]


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

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


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

--
Regards, LVT.


← →
GuAV ©   (2005-10-21 21:32) [8]

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

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


← →
Игорь Шевченко ©   (2005-10-24 11:21) [9]

GuAV ©   (21.10.05 21:32) [8]

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


← →
GuAV ©   (2005-10-24 17:47) [10]


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


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

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


← →
Игорь Шевченко ©   (2005-10-24 17:54) [11]

GuAV ©   (24.10.05 17:47) [10]


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


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


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


Нет.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.025 c
4-1130004506
Ландграф Павел
2005-10-22 22:08
2005.12.25
Найти первый кластер нужного файла


5-1118821158
Anatoly
2005-06-15 11:39
2005.12.25
Форма c компонентом при ткрытии в design дает "Error creating"


6-1126118804
Rave
2005-09-07 22:46
2005.12.25
Поиск по серверам.


14-1133281165
Serg1981
2005-11-29 19:19
2005.12.25
Что делать с жестким диском ?


2-1133899550
floxi
2005-12-06 23:05
2005.12.25
MonthCalendar




   Наверх