Можно ли рисовать на полосах прокрутки? - PullRequest
7 голосов
/ 04 февраля 2010

Можно ли рисовать на полосах прокрутки стандартных элементов управления, таких как TMemo, TListbox и т. Д.?

Все, что мне нужно, - это нарисовать некоторые базовые фигуры на полосах прокрутки, и я пытаюсь избежать реализации всего скроллинга с нуля. Есть указатели? ТИА!

Ответы [ 2 ]

11 голосов
/ 04 февраля 2010

Это действительно возможно, вы можете взглянуть на сообщение WM_NCPAINT, это версия, не относящаяся к области клиента, соответствующая версии сообщения WM_PAINT. Это непростая задача, однако, поскольку вы не собираетесь рисовать всю полосу прокрутки самостоятельно, она может быть более простой.

Более того, вы можете найти эту статью [1] из Проект кода интересно, код написан на C ++ и не совсем хорошо отформатирован, но он должен дать некоторое представление о том, как как мог добиться отрисовки полосы прокрутки владельцем.

Screenshot from project at The Code Project
Снимок экрана с ранее упомянутым проектом в TCP.

Помимо первого проекта, который вам может показаться этот проект [2] интересным, он также снимает полосу прокрутки, я знаю, что вы хотите рисовать только сверху полосы прокрутки, но моя ставка заключается в том, также поможет вам, включая исходный код.

Screenshot from Cool Scrollbar project
(источник: catch22.net )

Снимок экрана проекта Cool Scrollbar.

Это может помочь изучить исходный код VCL, чтобы получить информацию о положении кнопок полосы прокрутки и т. Д. Код можно найти в файле forms.pas, по крайней мере, так я выглядел из моего краткого поиска. Надеюсь, что все это может помочь. Удачи.

[1] http://www.codeproject.com/KB/dialog/skinscrollbar.aspx
[2] http://www.catch22.net/tuts/coolscroll

1 голос
/ 04 февраля 2010

Звучит так, будто вы можете создать собственный элемент управления (производный от TMemo или чего-либо еще). Вы можете override Paint процедура этого элемента управления, как описано здесь .

Я не знаю, позволит ли это вам рисовать на полосах прокрутки, но, надеюсь, это поможет вам в создании пользовательского элемента управления.

EDIT Комбинация ответа Томми и моего: Здесь является примером (хотя и немного более сложным), который использует метод WindowProc для обработки сообщений в пользовательском элементе управления. Если вы создадите элемент управления, вы сможете обработать сообщение WM_NCPAINT. Также здесь - дополнительная информация об обработке сообщений Windows в Delphi.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...