Управляющие кнопки Button и BitBtn
Общая характеристика компонентов управления
В данной главе будут рассмотрены такие управляющие элементы, как кнопки, индикаторы и некоторые другие. В таблице 1 приведен перечень этих элементов с краткими характеристиками.
На рис. 1 показаны примеры приведенных в таблице 1 компонентов.
Таблица 1. Кнопки, индикаторы и иные управляющие элементы
Пикто- грамма | Компонент | Страница | Описание |
Button (командная кнопка) | Standard | Используется для создания кнопок, которыми пользователь выполняет команды в приложении. | |
BitBtn (кнопка с графикой) | Additional | Используется для создания кнопок, на которых располагается битовая графика (например, кнопка OK с галочкой). | |
SpeedButton (кнопка с фиксацией и графикой) | Additional | Используется для создания инструментальных панелей кнопок с фиксацией нажатого состояния и в качестве быстрых кнопок, дублирующих команды меню. | |
RadioGroup (группа радиокнопок) | Standard | Является комбинацией группового окна GroupBox с набором радиокнопок RadioButton; служит специально для создания групп радиокнопок. Можно размещать в компоненте несколько радиокнопок, но никакие другие органы управления не разрешены. | |
RadioButton (радиокнопка) | Standard | Предлагают пользователю набор альтернатив, из которого выбирается одна. Набор реализуется требуемым количеством радиокнопок, размещенных в одном контейнере (форме, панели и т. п.). | |
GroupBox (групповое окно) | Standard | Является контейнером, объединяющим группу связанных органов управления, таких, как радиокнопки RadioButton, контрольные индикаторы Checkbox и т.д. | |
Checkbox (контрольный индикатор с флажком) | Standard | Позволяет пользователю включать и выключать опции программы. | |
Timer (таймер) | System | Используется для запуска процедур, функций и событий в указанные интервалы времени. |
В целом можно сказать, что в качестве управляющих кнопок используются обычно Button или, если желательно иметь на кнопке пиктограмму — BitBtn. Кнопки SpeedButton применяются в качестве быстрых кнопок и для построения инструментальных панелей, в которых требуется фиксация нажатого состояния. Компонент RadioGroup применяется для формирования группы регулярно размещенных радиокнопок, из которых в любой момент времени может быть включена только одна. Если по различным соображениям регулярное размещение радиокнопок нежелательно, то используются компоненты RadioButton, размещенные желательным образом в панели GroupBox. Наконец, для введения в приложение различных опций, которые пользователь может включать и выключать, используются индикаторы Checkbox.
Рис. 1Пример кнопок и индикаторов
Управляющие кнопки Button и BitBtn
Простейшей и, пожалуй, наиболее часто используемой кнопкой является кнопка Button (см. на рис.1 в верхнем левом углу формы), расположенная на странице библиотеки Standard. Реже используется кнопка BitBtn (см. на рис. 1 под кнопкой Button), отличающаяся, прежде всего, возможностью отобразить на ее поверхности изображение. Большинство свойств, методов и событий у этих видов кнопок одинаковы.
Основное с точки зрения внешнего вида свойство кнопки — Caption (надпись). В надписях кнопок можно предусматривать использование клавиш ускоренного доступа, выделяя для этого один из символов надписи. Перед символом, который должен соответствовать клавише ускоренного доступа, ставится символ амперсанта «&». Этот символ не появляется в надписи, а следующий за ним символ оказывается подчеркнутым. Тогда пользователь может вместо щелчка на кнопке нажать в любой момент клавишу Alt совместно с клавишей выделенного символа.
Например, если в вашем приложении имеется кнопка выполнения какой-то операции, вы можете задать ее свойство Caption равным «&Выполнить». На кнопке эта надпись будет иметь вид «Выполнить». И если пользователь нажмет клавиши Alt-В, то это будет эквивалентно щелчку на кнопке.
Основное событие любой кнопки — OnClick, возникающее при щелчке на ней. Именно в обработчике этого события записываются операторы, которые должны выполняться при щелчке пользователя на кнопке. Помимо этого есть еще ряд событий, связанных с различными манипуляциями клавишами и кнопками мыши.
Свойство Cancel, если его установить в true, определяет, что нажатие пользователем клавиши Esc будет эквивалентно нажатию на данную кнопку. Это свойство целесообразно задавать равным true для кнопок «Отменить» в различных диалоговых окнах, чтобы можно было выйти из диалога, нажав на эту кнопку или нажав клавишу Esc.
Свойство Default, если его установить в true, определяет, что нажатие пользователем клавиши ввода Enter будет эквивалентно нажатию на данную кнопку, даже если данная кнопка в этот момент не находится в фокусе. Правда, если в момент нажатия Enter в фокусе находится другая кнопка, то все-таки сработает именно кнопка в фокусе.
Еще одно свойство — ModalResult используется в модальных формах, рассмотрение которых выходит за рамки данной книги. В обычных приложениях значение этого свойства должно быть равно mrNone.
Из методов, присущих кнопкам, имеет смысл отметить один — Click. Выполнение этого метода эквивалентно щелчку на кнопке, т.е. вызывает событие кнопки OnClick. Этим можно воспользоваться, чтобы продублировать какими-то другими действиями пользователя щелчок на кнопке. Пусть, например, вы хотите, чтобы при нажатии пользователем клавиши с символом «С» или «с» в любой момент работы с приложением выполнялись операции, предусмотренные в обработчике события OnClick кнопки Button1. Поскольку неизвестно, какой компонент будет находиться в фокусе в момент этого события, надо перехватить его на уровне формы. Такой перехват осуществляется, если установить свойство формы KeyPreview в true. Тогда в обработчике события формы OnKeyPress можно написать оператор
if (key='C' or key='c') then Button1.Click;Если пользователь ввел символ «С» или «с», то в результате будет выполнен обработчик щелчка кнопки Button1.
Все сказанное выше в равной степени относится и к Button, и к BitBtn. Рассмотрим теперь особенности кнопки с пиктограммой BitBtn. Изображение на этой кнопке задается свойством Glyph. При нажатии кнопки с многоточием в строке свойства Glyph в Инспекторе Объектов вызывается окно, представленное на рис. 5.2. Нажав в нем кнопку Load вы перейдете в обычное окно открытия файла рисунка и можете выбрать файл битовой матрицы .bmp, содержащий желаемое изображение. В частности, с Delphi поставляется большое количество изображений для кнопок. Они расположены в каталоге \Images\Buttons, а сам каталог Images в Delphi 5 и 4 расположен в каталоге \program files\common files\borland shared, а в других версиях Delphi — в каталоге \program files\borland\delphi... .
После того, как вы выбрали изображение, нажмите OK и выбранное изображение появится на вашей кнопке левее надписи.
Файл изображения для кнопки может содержать до четырех изображений пиктограмм размера 16x16. Самое левое соответствует отжатой кнопке. Второе слева соответствует недоступной кнопке, когда ее свойство Enabled равно false. Третье слева изображение используется при нажатии пользователя на кнопку при ее включении. Четвертое слева изображение используется в кнопках с фиксацией SpeedButton, о которых будет сказано позднее, для изображения кнопки в нажатом состоянии. Большинство изображений для кнопок использует две пиктограммы. Число пиктограмм вы можете узнать из свойства кнопки NumGlyphs, которое после загрузки изображения покажет вам число пиктограмм в нем.
Расположение изображения и надписи на кнопке определяется свойствами Margin, Layout и Spacing. Если свойство Margin равно -1 (значение по умолчанию), то изображение и надпись размещаются в центре кнопки. При этом положение изображения но отношению к надписи определяется свойством Layout, которое может принимать значения: blGlyphLeft (слева, это значение принято по умолчанию), blGlyphRight (справа), blGlyphТор (вверху), blGlyphBottom (внизу). Если же Margin > 0, то в зависимости от значения Layout изображение и надпись смещаются к той или иной кромке кнопки, отступая от нее на число пикселей, заданное значением Margin.
Свойство Spacing задает число пикселей, разделяющих изображение и надпись на поверхности кнопки. По умолчанию Spacing = 4. Если задать Spacing = 0, изображение и надпись будут размещены вплотную друг к другу. Если задать Spacing = -1, то текст появится посередине между изображением и краем кнопки.
Еще одно свойство BitBtn — свойство Kind определяет тип кнопки. По умолчанию значение этого свойства равно bkCustom — заказная. Но можно установить и множество других предопределенных типов: bkOK, bkCancel, bkHelp, bkYes, bkNo, bkClose, bkAbort, bkRetry, bkIgnore, bkAll. В этих типах уже сделаны соответствующие надписи, введены пиктограммы, заданы еще некоторые свойства. Обычно все-таки лучше ими не пользоваться. Во-первых, надписи все равно надо переводить на русский язык. Во-вторых, предопределенные рисунки обычно выбиваются из общего стиля конкретного приложения. И главное — предопределение некоторых свойств, не учтенных вами, может иногда приводить к странным результатам работы. Уж лучше использовать заказные кнопки и самому устанавливать в них все необходимые свойства.