

AutoScroll Если равно значению True, полосы прокрутки появляются и скрываются автоматически по мере необходимости.
AutoSize Режим автоматического изменения размеров области прокрутки в зависимости от размеров и положения внутренних компонентов.
BevelEdges Вложенные свойства beLeft, beTop, beRight и beBottom
определяют видимость соответственно левой, верхней, правой и нижней сторон рельефной рамки.
BevelInner Внутренний скос рельефной рамки: bvNone — скос отсутствует, bvLowered — скос внутрь, bvRaised — скос наружу; bvSpace — скос заменяется отступом.
BevelKind Вид рельефной рамки: bkNone — рамки нет, bkTile — рамка с четкими скосами, bkSoft — рамка со сглаженными скосами, bkFlat — плоская рамка (без скосов).
BevelOuter Внешний скос рельефной рамки: bvNone — скос отсутствует, bvLowered — скос внутрь, bvRaised — скос наружу; bvSpace — скос заменяется отступом.
BevelWidth Ширина скосов рельефной рамки.
BorderStyle Определяет, имеет ли область прокрутки рамку.
DockSite Определяет, используется ли область прокрутки для стыковки других компонентов.
HorzScrollBar Определяет параметры и поведение горизонтальной полосы прокрутки (см. табл. 6.10).
VertScrollBar Определяет параметры и поведение вертикальной полосы прокрутки (см. табл. 6.10).
OnGetSiteInfo Происходит, когда у компонента запрашивается место для стыковки.
Таблица 8.13. Важнейшие свойства компонента ScrollBox
Компонент ScrollBox служит контейнером для других компонентов и обеспечивает их прокрутку внутри себя. Давайте поместим на него рисунок (компонент Image), а область прокрутки расположим между меню и строкой состояния. В результате большие рисунки будут прокручиваться уже не формой, а компонентом ScrollBox и строка состояния останется на своем месте, прижатой к нижнему краю формы.
Шаг 50. Выделите на форме компонент Image и временно удалите его в буфер (команда меню Edit | Cut). Теперь опустите на форму компонент ScrollBox, выбрав его из палитры компонентов. Назовите новый компонент ScrollBox и подгоните его под всю незанятую область формы, установив свойство Align в значение alClient (рисунок 8.46).
301

Рисунок 8.46. Свойство Align обеспечивает подгонку компонента под размеры контейнера
Шаг 51. А сейчас переключитесь на форму (так, чтобы компонент ScrollBox остался выделенным) и вставьте из буфера обмена компонент Image (команда меню Edit | Paste). Убедитесь, что он находится в левом верхнем углу области прокрутки.
Готово. Выполните компиляцию и запустите приложение, загрузите в него какой-нибудь рисунок из каталога C:\Program Files\Common Files\Borland Shared\Images\Splash\256Color.
Увеличивая и уменьшая окно, понаблюдайте за тем, как появляются и исчезают полосы прокрутки между меню и строкой состояния (рисунок 8.47). Обратите внимание, что величина бегунков на полосах прокрутки зависит от соотношения видимой части и всего изображения. Это работает компонент ScrollBox. Правда, здорово! А самое главное — быстро и без единой строчки кода.
Рисунок 8.47. Программа для просмотра графических файлов теперь умеет прокручивать не уместившееся внутри окна изображение
8.4.3. Полосы прокрутки
302

Коль уж речь зашла о прокрутке, сделаем небольшое отступление и скажем пару слов о компоненте ScrollBar. Вы, наверное, еще раньше заметили его в палитре компонентов на вкладке Standard и сейчас не совсем понимаете, для чего он нужен (рисунок 8.48).
Рисунок 8.48. Компонент ScrollBar
ScrollBar — это отдельная полоса прокрутки без области прокрутки. Ее согласованная работа с другими компонентами обеспечивается программистом. Для этого в компоненте ScrollBar предусмотрено событие OnScroll, в ответ на которое и нужно выполнять необходимые действия. Должны вам сообщить, что компонент ScrollBar не имеет никакого отношения ни к форме, ни к компоненту ScrollBox. И вообще, он используется редко. Авторы этой книги будут вам признательны, если вы сообщите им о применении компонента ScrollBar в реальной задаче.
Следуя традиции данной книги, мы приводим табличное описание свойств компонента
(таблица 8.14).
Свойство Описание
Kind |
Вид полосы прокрутки: горизонтальная или вертикальная. |
LargeChange Величина "информативной страницы".
Min, Max Начальная и конечная виртуальные позиции на полосе прокрутки.
Position |
Позиция бегунка на полосе прокрутки. |
SmallChange Величина "информативной строки".
OnChange Происходит при изменении значения свойства Position. Если значение свойства Position изменяется при перемещении пользователем бегунка, то событие OnChange происходит сразу после события OnScroll.
OnScroll |
Происходит при перемещении бегунка. |
Таблица 8.14. Важнейшие свойства и события компонента ScrollBar
Рисунок 8.49 наглядно поясняет смысл свойств LargeChange и SmallChange.
303

Рисунок 8.49. Свойства LargeChange и SmallChange применяются при расчете величины прокрутки
Ну вот вы и разобрались с прокруткой. Уверены, что вам понравилось, как она реализована в среде Delphi. Действительно, компонентное программирование. Взял компонент ScrollBox, поместил на форму, набросал в него других компонентов — и готово. А теперь пора засучить рукава, ибо вас ждет самая увлекательная часть этой главы — проектирование панели инструментов.
8.5. Панель инструментов
Панель инструментов (toolbar) — это расположенная под главным меню панель с кнопками, раскрывающимися списками, переключателями и другими компонентами. Компоненты панели инструментов, как правило, дублируют часто используемые команды меню.
8.5.1. Панель
Для создания панели инструментов в среде Delphi существует компонент ToolBar, расположенный в палитре компонентов на вкладке Win32.
Рисунок 8.50. Компонент ToolBar
Шаг 52. Активизируйте форму и поместите на нее компонент ToolBar. Дайте новому компоненту имя ToolBar (рисунок 8.51).
Рисунок 8.51. Панель инструментов оказалась в области прокрутки
Внимательный читатель, наверное, уже обратил внимание, что компонент ToolBar попал в область прокрутки (внутрь компонента ScrollBox), и поэтому будет прокручиваться вместе с рисунком. Нам нужно вынести компонент ToolBar из области прокрутки и поместить его прямо в форму. Для этого воспользуемся окном Object TreeView.
Шаг 53. Перейдите к окну Object TreeView и найдите в нем компонент ToolBar. Захватите его с помощью мыши и перетащите к элементу PictureForm в этом же окне (рисунок 8.52).
304

Рисунок 8.52. Буксировка в окне Object TreeView позволяет быстро перенести компонент с одной панели на другую
Теперь компонент ToolBar находится именно там, где нужно (рисунок 8.53):
Рисунок 8.53. Панель инструментов вынесена за пределы области прокрутки
Между прочим, если вы сразу хотите поместить компонент на другой компонент, закрытый от вашего взора, выберите первый компонент в палитре компоненте и щелкните второй компонент в окне Object TreeView (рисунок 8.54):
305

Рисунок 8.54. Размещение компонента сразу внутри нужного компонента с помощью окна
Object TreeView
Шаг 54. В окне свойств установите свойство AutoSize в значение True. После этого панель инструментов будет автоматически подгонять свои размеры в зависимости от размеров и количества размещенных на ней компонентов.
Основу для размещения кнопок вы создали и в качестве передышки мы предлагаем вам пробежаться по наиболее важным свойствам компонента ToolBar и поэкспериментировать с их значениями (таблица 8.15).
Свойство |
Описание |
|
|
|
|
|
|
||||
AutoSize |
Если равно значению True, то панель |
||||
|
автоматически изменяет свою высоту в |
||||
|
зависимости от размеров размещенных на |
||||
|
ней компонентов. |
|
|
|
|
BorderWidth |
Величина отступа от границ компонента до |
||||
|
кнопок. |
|
|
|
|
ButtonWidth, ButtonHeight |
Ширина и высота кнопок на панели |
||||
|
инструментов. |
|
|
|
|
Customizable |
Если равно значению True, то пользователь |
||||
|
во время работы программы имеет |
||||
|
возможность управлять |
расположением |
|||
|
кнопок на панели инструментов. Удерживая |
||||
|
клавишу Shift пользователь может захватить |
||||
|
кнопку и перенести ее на нужное место, а |
||||
|
двойным щелчком панели инструментов (но |
||||
|
не ее кнопок!), пользователь может вызвать |
||||
|
специальное окно настройки. |
|
|||
DisabledImages |
Список |
значков, |
отображаемых |
на |
|
|
недоступных |
кнопках. |
Свойство |
||
|
DisabledImages используется совместно со |
306
|
свойством |
ImageIndex |
компонента |
|||
|
ToolButton. |
|
|
|
|
|
DockSite |
Определяет, используется ли панель |
|||||
|
инструментов |
для |
стыковки |
других |
||
|
компонентов. |
|
|
|
|
|
EdgeBorders |
Вложенные свойства ebLeft, ebTop, ebRight |
|||||
|
и |
ebBottom |
определяют |
|
видимость |
|
|
соответственно левой, верхней, правой и |
|||||
|
нижней сторон рельефной рамки. |
|
||||
EdgeInnter |
Внутренний скос рельефной рамки: esNone |
|||||
|
— скос отсутствует, esLowered — скос |
|||||
|
внутрь, esRaised — скос наружу. |
|
||||
EdgeOuter |
Внешний скос рельефной рамки: esNone — |
|||||
|
скос отсутствует, esLowered — скос внутрь, |
|||||
|
esRaised — скос наружу. |
|
|
|||
Flat |
Если равно значению True, то все кнопки, |
|||||
|
находящиеся на панели инструментов, не |
|||||
|
имеют рельефных границ. Рельефные |
|||||
|
границы появляются |
при |
|
наведении |
||
|
указателя мыши на кнопку. |
|
|
HideClippedButtons Если равно значению True, то кнопки, не уместившиеся на панели целиком, не показываются вообще.
HotImages |
Список значков, которые отображаются на |
|||
|
кнопках при наведении на них указателя |
|||
|
мыши. Свойство HotImages используется |
|||
|
совместно |
со |
свойством |
ImageIndex |
|
компонента ToolButton. |
|
||
Images |
Список значков, которые отображаются на |
|||
|
кнопках. Свойство Images используется |
|||
|
совместно |
со |
свойством |
ImageIndex |
|
компонента ToolButton. |
|
||
Indent |
Отступ от края панели до первой кнопки. |
|||
List |
Если равно значению True, то надписи на |
|||
|
кнопках отображаются справа от значков. |
|||
|
Иначе надписи отображаются под значками. |
|||
Menu |
Ссылка на компонент MainMenu. Установка |
|||
|
значения этого свойства приводит к тому, |
|||
|
что панель инстурментов выглядит как |
|||
|
строка главного меню. |
|
||
ShowCaptions |
Определяет, отображаются ли надписи на |
|||
|
кнопках. Если установлено значение False, |
307
то на кнопках отображаются только значки.
ShowHint |
Разрешает (значение |
True) или |
запрещает |
|
|
(значение False) показ высплывающих |
|||
|
подсказок для кнопок панели инструментов. |
|||
Transparent |
Если равно значению True, то фон панели |
|||
|
инструментов является прозрачным. |
|||
Wrapable |
Включает |
автоматический |
перенос |
|
|
невместившихся |
кнопок |
панели |
|
|
инструментов на новую строку. Если равно |
|||
|
значению False, то перенос кнопок |
|||
|
регулируется с помощью свойства Wrap |
|||
|
компонента ToolButton. |
|
||
OnAdvancedCustomDraw |
Происходит до и после рисования панели |
|||
|
инструментов на экране. |
|
||
OnAdvancedCustomDrawBut |
Происходит до и после рисования каждой |
|||
ton |
кнопки панели инструментов на экране. |
|||
OnCustomDraw |
Происходит |
при |
рисовании |
панели |
|
инструментов на экране. |
|
||
OnCustomDrawButton |
Происходит при рисовании каждой кнопки |
|||
|
панели инструментов на экране. |
|
||
OnCustomizeAdded |
Происходит, когда пользователь добавляет |
|||
|
кнопку на панель с помощью окна |
|||
|
настройки панели инструментов. |
|
||
OnCustomizeCanDelete |
Происходит, когда пользователь пытается |
|||
|
убрать кнопку с помощи окна настройки |
|||
|
панели инструментов. |
|
|
OnCustomizeCanInsert Происходит, когда пользователь пытается добавить кнопку с помощи окна настройки панели инструментов.
OnCustomized |
Происходит |
|
по |
окончании |
любого |
|
изменения на панели инструментов. |
|
|||
OnCustomizeDelete |
Происходит, |
когда |
пользователь |
убирает |
|
|
кнопку с панели при помощи окна |
||||
|
настройки панели инструментов. |
|
|||
OnCustomizeNewButton |
Используется |
для |
формирования |
списка |
|
|
кнопок, доступных для добавления на |
||||
|
панель инструментов. В этом обработчике, |
||||
|
как правило, динамически создаются и |
||||
|
возвращаются |
через параметр |
Button |
||
|
объекты |
класса |
TToolButton |
(или |
|
|
производных классов). |
|
308

OnCustomizeReset Происходит при нажатии пользователем кнопки Reset в окне настройки панели инструментов.
OnCustomizing |
Происходит при вызове пользователем окна |
|||
|
настройки панели инструментов и при |
|||
|
нажатии кнопки Reset в этом окне. |
|||
OnGetSiteInfo |
Происходит, |
когда |
у |
компонента |
|
запрашивается место для стыковки. |
Таблица 8.15. Важнейшие свойства и события компонента ToolBar
8.5.2. Кнопки
Кнопки панели инструментов представлены компонентами ToolButton. Не пытайтесь найти компонент ToolButton в палитре компонентов. Его там нет, поскольку он не является самостоятельным компонентом, а создается и управляется из компонента ToolBar.
Шаг 55. Для добавления кнопки вызовите контекстное меню компонента ToolBar и выберите команду New Button (рисунок 8.55).
Рисунок 8.55. Создание кнопки на панели инструментов с помощью команды New Button контекстного меню
На панели инструментов появится кнопка, свойства которой будут тут же показаны в окне свойств. Дайте компоненту имя OpenToolButton.
Шаг 56. Аналогичным образом создайте еще четыре кнопки с программными идентификаторами SaveAsToolButton, HalfSizeToolButton, NormalSizeToolButton и DoubleSizeToolButton (рисунок 8.56).
309

Рисунок 8.56. Все необходимые кнопки созданы, но для них еще не заданы значки
Подготовительная работа завершена, список кнопок готов. На следующем шаге мы назначим кнопкам значки, но прежде перечислим важнейшие свойства компонента ToolButton, с которыми нам придется дальше работать (таблица 8.16).
Свойство Описание
Action Команда, хранящаяся в компоненте ActionList и выполняемая при нажатии кнопки (см. параграф 8.6).
AllowAllUp Разрешает всем кнопкам одной группы находиться в отжатом состоянии.
AutoSize Включает режим автоматического подбора размеров кнопки в зависимости от размеров значка и надписи.
Caption |
Надпись на кнопке. |
|
|
|
|
Down |
Если равно True, то кнопка рисуется нажатой. |
|
|||
DropDownMe |
Выпадающее меню, которое появляется при нажатии |
||||
nu |
кнопки. Это свойство используется, если свойство Style |
||||
|
содержит значение tbdDropDown. |
|
|
|
|
Grouped |
Определяет, |
принадлежит |
ли |
кнопка |
группе |
|
взаимоисключающих |
|
переключателей. |
||
|
Сгруппированными считаются |
расположенные |
рядом |
||
|
кнопки со значением True в свойстве Grouped и |
||||
|
значением tbdCheck в свойстве Style. |
|
|
||
ImageIndex |
Номер значка в списке Images компонента ToolBar. |
||||
Indeterminate |
Если равно True, то кнопка имеет неопределенное |
||||
|
состояние и рисуется поблекшей. |
|
|
|
310