2009-09-16 5 views
2

Я хотел бы изменить ширину прокрутки TFrame.
Я знаю, что я мог бы изменить все ScrollingBars в системе:Как изменить ширину ScrollBar?

SystemParametersInfo(SPI_SETNONCLIENTMETRICS,.... 

Но как я это делаю для конкретного WinControl?

ответ

1

Большая часть кода в Delphi зависит от ширины полос прокрутки как фиксированной настройки системы, поэтому вы не можете изменять ширину, не нарушая управление. (Не без перезаписи TControlScrollBar и связанных с ним элементов управления в VCL.)

Вы можете, конечно, скрыть полосы прокрутки по умолчанию элемента управления и добавить рядом с ним свои собственные компоненты TScrollbar.


Стандартный класс TScrollBar - это сам WinControl, где полоса прокрутки принимает всю ширину и высоту элемента управления. Класс TControlScrollBar связан с другим WinControl для управления полосами прокрутки по умолчанию, которые назначены элементам Windowed. Хотя необработанный API мог бы использовать более гибкую ширину, у вас всегда будет проблема, что VCL будет просто предполагать стандартную ширину для этих элементов управления по умолчанию.

Это также показывает самую большую разницу между типами прокрутки: TScrollBar имеет собственный дескриптор Windows, а TControlScrollBar берет его из связанного элемента управления.

0

Вы можете попробовать что-то вроде этого:

your_frame.HorzScrollBar.Size := 50; 
    your_frame.HorzScrollBar.ButtonSize := your_frame.HorzScrollBar.Size; 
+0

Это * возможно * работа, если вы используете плоские полосы прокрутки и имеют COMCTL32.DLL ниже версии 6. Смотрите также http://msdn.microsoft.com/en -us/library/bb775438 (VS.85) .aspx и http://msdn.microsoft.com/en-us/library/bb787529(VS.85).aspx –

Смежные вопросы