как можно самому рисовать стандартный скролл. например, если в листбоксе будет больше элементов, чем может влезть в окно, то появится скролл. как мне его самому рисовать?
The stars so gaily glistened... (Fri, 07 Jan 2005 15:04:34 GMT @669)
...while the fading voice of race1 whispered through the darkness:
r> как мне его самому рисовать?
Здравствуйте, Arioch, Вы писали:
A>The stars so gaily glistened... (Fri, 07 Jan 2005 15:04:34 GMT @669) A>...while the fading voice of race1 whispered through the darkness:
r>> как мне его самому рисовать?
A>Где рисовать? A>Чем не подходит TSrollBar ?
эл-ты списка я уже рисую сам и мне хотелось бы самому рисовать скрол, что бы всё было в едином стиле. но скрол этот необычный, он сам появляется и сам рисуется. а как я могу его нарисовать сам?
> как можно самому рисовать стандартный скролл. например, если в листбоксе будет больше элементов, чем может влезть в окно, то появится скролл. как мне его самому рисовать?
если без тем, то DrawFrameControl с uType := DFC_SCROLL,
если с темами, то через ThemeServices.GetElementDetails и ThemeServices.DrawElement.
другой путь -- в перегруженной CreateParams указать Style := Style or WS_VSCROLL or WS_HSCROLL (в зависимости от того, какие нужны), а когда нужен другой вариант делать RecreateWnd.
Здравствуйте, Григорий Поваров, Вы писали:
>> как можно самому рисовать стандартный скролл. например, если в листбоксе будет больше элементов, чем может влезть в окно, то появится скролл. как мне его самому рисовать?
ГП>если без тем, то DrawFrameControl с uType := DFC_SCROLL, ГП>если с темами, то через ThemeServices.GetElementDetails и ThemeServices.DrawElement.
ГП>другой путь -- в перегруженной CreateParams указать Style := Style or WS_VSCROLL or WS_HSCROLL (в зависимости от того, какие нужны), а когда нужен другой вариант делать RecreateWnd.
вот есть у меня картинка, её я хочу нарисовать на сдандартном сроле. какие сообщения мне нужно перехватывать что бы это сделать. или может убарть системный скрол и самому его сделать (CreateWindowEx("SCROLLBAR) а там ловить его сообщения?
Здравствуйте, race1, Вы писали:
R>как можно самому рисовать стандартный скролл. например, если в листбоксе будет больше элементов, чем может влезть в окно, то появится скролл. как мне его самому рисовать?
>>> как можно самому рисовать стандартный скролл. например, если в листбоксе будет больше элементов, чем может влезть в окно, то появится скролл. как мне его самому рисовать?
> вот есть у меня картинка, её я хочу нарисовать на сдандартном сроле. какие сообщения мне нужно перехватывать что бы это сделать. или может убарть системный скрол и самому его сделать (CreateWindowEx("SCROLLBAR) а там ловить его сообщения?
Что-то я перестал понимать, что тебе надо...
Вариант i. Твое чувство прекрасного протестует против того, что нарисовали в MS и ты хочешь сделать свой (сам нарисовать, сам рулить), тогда это ничем не отличается от того, как ты делаешь весь свой остальной контрол: в Paint рисуем что-то свое, по MouseDown и KeyDown рулим.
Вариант ii. Тебя устраивает как выглядит Scroll от MS, но тебе чтобы он был не справа и снизу от окна, а как-то по-другому, тогда как и в i рисуешь в Paint, рулишь по MouseDown и KeyDown, но в Paint рисуем при помощи DrawFrameControl \ ThemeServices.DrawElement.
Вариант iii. Тебя полностью устраивает Scroll от MS. Ты только хочешь им рулить, тогда в CreateParams указываем Style := Style or WS_VSCROLL or WS_HSCROLL, а потом традиционно рулим по MouseDown и KeyDown.
Естественно, что в зависимости от варианта рулить приходиться по-разному: так в случае i и ii почти обо всем придется заботиться самому, в iii все проще -- через SetScrollInfo.
у-у-у Как все запущено
На самом деле это нетривиальная задача. Когда мне это потребовалось — единственное приемлемое решение, которое я нашел:
— пишем TConrtol — c функциональностью ScroolBar
— размещаем его НАД стандарьным скролом
— ловим мышиные эвенты и передаем окну
— ловим эвенты от окна и при скролировании и т.д. читаем свойства скрул бара (позицию, размер ползунка и т.д) и рисуем свой скрул по этим параметрам.
Детально я не скажу как это делать, но при необходимости большой на следюущей неделе могу кинуть пример (исходники на компе у брата дома).