Простейшей и, пожалуй, наиболее часто используемой кнопкой является кнопка Button, расположенная на странице библиотеки Standard. Реже используется кнопка BitBtn, отличающаяся, прежде всего, возможностью отобразить на ее поверхности изображение. Большинство свойств, методов и событий у этих видов кнопок одинаковы.
Основное с точки зрения внешнего вида свойство кнопки - Caption (надпись). В надписях кнопок можно предусматривать использование клавиш ускоренного доступа, выделяя для этого один из символов надписи. Перед символом, который должен соответствовать клавише ускоренного доступа, ставится символ амперсанда «&». Этот символ не появляется в надписи, а следующий за ним символ оказывается подчеркнутым. Тогда пользователь может вместо щелчка на кнопке нажать в любой момент клавишу Alt совместно с клавишей выделенного символа.
Например, если в вашем приложении имеется кнопка выполнения какой-то операции, вы можете задать ее свойство Caption равным «&Start». На кнопке эта надпись будет иметь вид «Start». И если пользователь нажмет клавиши Alt+S, то это будет эквивалентно щелчку на кнопке.
Основное событие любой кнопки - OnClick, возникающее при щелчке на ней. Именно в обработчике этого события записываются операторы, которые должны выполняться при щелчке пользователя на кнопке. Помимо этого есть еще ряд событий, связанных с различными манипуляциями клавишами и кнопками мыши. Писать обработчик события OnClick надо, если вы не связываете свойством Action данную кнопку с каким-то действием.
Свойство Cancel, если установить его в true, определяет, что нажатие пользователем клавиши Esc будет эквивалентно щелчку на данной кнопке. Это свойство целесообразно задавать равным true для кнопок Отменить в различных диалоговых окнах, чтобы можно было выйти из диалога, нажав на эту кнопку или нажав клавишу Esc.
Свойство Default, если его установить в true, определяет, что нажатие пользователем клавиши ввода Enter будет эквивалентно нажатию на данную кнопку, даже если данная кнопка в этот момент не находится в фокусе. Правда, это сработает, если в фокусе находится какой-то оконный компонент. Если же в момент нажатия Enter в фокусе находится другая кнопка, то все-таки сработает именно кнопка в фокусе. Если у нескольких кнопок на форме свойство Default задано равным true, то при нажатии Enter сработает та из них, которая находится раньше в последовательности табуляции.
Из методов, присущих кнопкам, имеет смысл отметить один - Click. Выполнение этого метода эквивалентно щелчку на кнопке, т.е. вызывает событие кнопки OnClick. Этим можно воспользоваться, чтобы продублировать какими-то другими действиями пользователя щелчок на кнопке. Пусть, например, вы хотите, чтобы при нажатии пользователем клавиши с символом "С" или "с" в любой момент работы с приложением выполнялись операции, предусмотренные в обработчике события OnClick кнопки Button1. Поскольку неизвестно, какой компонент будет нажиматься в фокусе в момент этого события, надо перехватить его на уровне формы. Такой перехват осуществляется, если установить свойство формы KeyPreview = true. Тогда в обработчике события формы OnKeyPresss можно написать оператор:
if ((Key=='С')||(Key=='с'))
Button1->Click();
Если пользователь ввел символ "С" или "с", то в результате будет выполнен обработчик щелчка кнопки Button1.
Компонент BitBtn
Рассмотренное выше относится и к Button, и к BitBtn. Рассмотрим теперь особенности кнопки с пиктограммой BitBtn. Изображение на этой кнопке задается свойством Glyph. При нажатии кнопки с многоточием в строке свойства Glyph в Инспекторе Объектов вызывается окно. Нажав в нем кнопку Load, вы перейдете в обычное окно открытия файла рисунка и можете выбрать файл битовой матрицы .bmp, содержащий желаемое изображение. В частности, с C++ Builder поставляется большое количество изображений для кнопок. Они расположены в каталоге \lmages\Buttons, а сам каталог Images в C++ Builder обычно расположен в каталоге ...\Program Files\Common Files\ Borlarid\Barland Shared. После того как вы выбрали изображение, нажмите OK и выбранное изображение появится на вашей кнопке левее надписи.
Файл изображения для кнопки может содержать до четырех изображений пиктограмм размера 16x16. Самое левое соответствует отжатой кнопке. Второе слева соответствует недоступной кнопке, когда ее свойство Enabled равно false. Третье слева изображение используется при нажатии пользователя на кнопку при ее включении. Четвертое слева изображение используется в кнопках с фиксацией SpeedButton, для изображения кнопки в нажатом состоянии. Большинство изображений для кнопок использует две пиктограммы. Число пиктограмм вы можете узнать из свойства кнопки NumGlyphs, которое после загрузки изображения покажет вам число пиктограмм в нем.
Расположение изображения и надписи на кнопке определяется свойствами Margin, Layout и Spacing. Если свойство Margin равно -1 (значение по умолчанию), то изображение и надпись размещаются в центре кнопки. При этом положение изображения по отношению к надписи определяется свойством Layout, которое может принимать значения: blGlyphLeft (слева, это значение принято по умолчанию), blGlyphRight (справа), blGlyphTop (вверху), blGlyphBottom (внизу). Если же Margin > 0, то в зависимости от значения Layout изображение и надпись смещаются к той или иной кромке кнопки, отступая от нее на число пикселов, заданное значением Margin.
Свойство Spacing задает число пикселов, разделяющих изображение и надпись на поверхности кнопки. По умолчанию Spacing = 4. Если задать Spacing = 0, изображение и надпись будут размещены вплотную друг к другу. Если задать Spacing = -1, то текст появится посередине между изображением и краем кнопки.
Еще одно свойство BitBtn это свойство Kind, которое определяет тип кнопки. По умолчанию значение этого свойства равно bkCustom - заказная. Но можно установить и множество других предопределенных типов: bkOK, bkCancel, bkHelp, bkYes, bkNo, bkClose, bkAbort, bkRetry, bklgnore, bkAll. В этих типах уже сделаны соответствующие надписи, введены пиктограммы, заданы еще некоторые свойства. Обычно все-таки лучше ими не пользоваться. Во-первых, надписи все равно надо переводить на русский язык. Во-вторых, предопределенные рисунки обычно выбиваются из общего стиля конкретного приложения. И самое главное - предопределение некоторых свойств, не учтенных вами, может иногда приводить к странным результатам работы. Уж лучше использовать заказные кнопки и самому устанавливать в них все необходимые свойства.