ТЕМА «Работа с кнопками»
План:
1. Стандартная кнопка
2. Кнопка с изображением
3. Кнопка с фиксацией и изображением
Кнопка представляет собой интерфейсный элемент управления, предназначенный для запуска определенных команд.
Система Delphi предлагает несколько компонентов, представляющих собой различные варианты кнопок:
· Button – стандартная кнопка;
· BitBtn – кнопка с изображением;
· SpeedButton – кнопка с фиксацией и изображением.
Как элементы управления, эти виды кнопок появились в разное время, но имеют много общего. Различия в облике и функциональных возможностях между разными вариантами кнопок незначительны.
Кнопка отображается на форме в виде выпуклого прямоугольника, щелчок мыши на котором приводит к генерации события OnClick.
Стандартная кнопка
Стандартная кнопка, или просто кнопка, представлена в Delphi компонентом Button, который является оконным элементом управления, расположенным на странице библиотеки Standard (Стандартные).
Кнопка Button может иметь на поверхности надпись (назначение кнопки или описание действий, выполняемых при ее нажатии), задаваемую с помощью свойства Caption.
|
|
Свойства компонента Button приведены в таблице 1
Таблица 1 Свойства компонента Button (стандартная кнопка)
Свойство | Описание |
Name | Имя компонента. Используется в программе для доступа к компоненту и его свойствам |
Caption | Текст на кнопке |
Left | Расстояние от левой границы кнопки до левой границы формы |
Тор | Расстояние от верхней границы кнопки до верхней границы формы |
Height | Высота кнопки |
Width | Ширина кнопки |
Enabled | Признак доступности кнопки. Если значение свойства равно True, то кнопка доступна. Если значение свойства равно False, то кнопка не доступна. |
Visible | Позволяет скрыть кнопку (False) или сделать ее видимой (True) |
Hint | Подсказка – текст, который появляется рядом с указателем мыши при позиционировании указателя на командной кнопке (для того чтобы текст появился, надо чтобы значение свойства ShowHint было True) |
ShowHint | Разрешает (True) или запрещает (False) отображение подсказки при позиционировании указателя на кнопке |
ModalResult Cancel | определяет результат, с которым было закрыто модальное окно значение True этого свойства связывает нажатие клавиши Esc с обработчиком события OnClick |
Default | значение True этого свойства связывает нажатие клавиши Enter с обработчиком события OnClick |
При применении кнопки для закрытия окна можно использовать ее свойство ModalResult типа TModalResult. Оно определяет, какое значение будет содержать одноименное свойство ModalResult формы, когда окно закрывается при нажатии соответствующей кнопки. Обычно свойство ModalResult применяется для закрытия модальных окон, и его возможными значениями являются целые числа, некоторые из них объявлены как именованные константы:
|
|
· mrNone (число 0);
· mrOk, имеет значение idok (число 1);
· mrCancel, имеет значение idCancel (число 2);
· mrAbort, имеет значение idAbort (число 3);
· mrRetry, имеет значение idRetry (число 4);
· mrIgnore, имеет значение idIgnore (число 5);
· mrYes, имеет значение idYes (число 6);
· mrNo, имеет значение idNo (число 7);
· mrAll, имеет значение mrNo + 1;
· mrNoToAll, имеет значение mrAll + 1;
· mrYesToAll – mrNoToAll + 1.
Если свойство ModalResult кнопки установлено в ненулевое значение, отличное от mrNone (по умолчанию), то при нажатии кнопки модальная форма закрывается автоматически, поэтому нет необходимости вызывать метод Close в обработчике события OnClick этой кнопки, и свойству формы ModalResult будет автоматически присвоено соответствующее значение. Итак, щелчок на кнопке, у которой определено свойство ModalResult, приводит к закрытию модального окна и возвращению в программу значения ModalResult как результат диалога с пользователем: mrNone – модальное окно не закрывается, mrOk – была нажата кнопка Ok; mrCancel – была нажата кнопка Cancel; mrAbort – была нажата кнопка Abort; mrRetry – была нажата кнопка Retry; mrIgnore – была нажата кнопка Ignore; mrYes – была нажата кнопкаYes; mrNo – была нажата кнопка No; mrAll – была нажата кнопка All.
Рассмотрим следующий обработчик события OnClick кнопки:
procedure TForm2.Button1Click(Sender: TObject);
begin
Form1.Close;
Form1.ModalResult:= mrOk;
end;
Его можно заменить таким обработчиком:
procedure TForm1.FormCreate(Sender: TObject);
begin
Button1.ModalResult:= mrOk;
end;
Обычно требуемые значения свойства ModalResult для кнопок устанавливаются при проектировании формы с помощью Инспектора объектов. Однако их можно задать и при выполнении приложения, что может понадобиться, если необходимо запретить закрытие диалоговой формы, например, при наличии несохраненных редактируемых данных:
procedure TForm2.ClickMemo(Sender: TObject);
begin
if Memo1.Modified then Button3.ModalResult:= mrNone
else Button3.ModalResult:= mrOK
end;
В отличие от большинства других видимых компонентов кнопка TButton является элементом операционной системы Windows и поэтому не может изменять свой цвет произвольным образом – кнопка меняет его вместе с изменением палитры Windows. Кнопка всегда имеет цвет clBtnFace и не имеет свойства Color. Шрифт надписи на кнопке может менять свой стиль и размер, но компонент игнорирует изменение его цвета.
Основным для кнопки является событие OnClick, возникающее при ее нажатии. При этом кнопка принимает соответствующий вид, подтверждая происходящее действие визуально. Действия, выполняемые в обработчике события OnClick, происходит сразу после отпускания кнопки. Именно в обработчике этого события записываются операторы, которые должны выполняться при щелчке пользователя на кнопке.
Кнопку можно нажать следующими способами:
· щелчком мыши;
· выбором комбинации клавиш, если она задана в свойстве Caption;
Для того чтобы событие OnClick генерировалось при нажатии комбинации клавиш, необходимо выделить для этого один из символов надписи. Перед символом, который должен соответствовать клавише ускоренного доступа, ставится символ «&». Этот символ не появляется в надписи, а следующий за ним символ оказывается подчеркнутым. Тогда пользователь может вместо щелчка на кнопке нажать в любой момент клавишу Alt совместно с клавишей выделенного символа. Например, если в вашем приложении имеется кнопка выполнения какой-то операции, вы можете задать ее свойство Caption равным «&Выполнить». На кнопке эта надпись будет иметь вид «В ыполнить». И если пользователь нажмет комбинацию клавиш Alt+B, то это будет эквивалентно щелчку на кнопке.
· нажатием клавиш Enter или пробел;
На нажатие клавиш Enter или пробел реагирует кнопка по умолчанию, т.е. находящаяся в фокусе кнопка, заголовок которой выделен пунктирным прямоугольником. Если фокус ввода получает некнопочный элемент управления, например Edit, то кнопкой по умолчанию становится та, у которой свойство Default типа Boolean установлено в значение True. В этом случае кнопка по умолчанию выделяется черным прямоугольником. При размещении в процессе конструирования приложения кнопок в форме (или в другом контейнере, например, Panel) это свойство имеет значение False, т.е. выбранных кнопок нет. Если свойство Default программно установить в значение True для двух и более кнопок, это не приведет к ошибке, но кнопкой по умолчанию будет являться первая кнопка по порядку обхода при табуляции.
|
|
· нажатием клавиши Esc.
Чтобы кнопка реагировала на нажатие клавиши Esc, необходимо ее свойство Cancel типа Boolean установить в значение True. При установке значения True для свойств Cancel двух и более кнопок кнопкой отмены считается первая по порядку обхода табуляции. По умолчанию значение Cancel равно False, и никакая кнопка не реагирует на нажатие клавиши Esc.
Из методов, присущих кнопкам, имеет смысл отметить один – Click. Выполнение этого метода эквивалентно щелчку на кнопке, т.е. вызывает событие кнопки OnClick. Этим можно воспользоваться, чтобы продублировать какими-то другими действиями пользователя щелчок на кнопке. Пусть, например, вы хотите, чтобы при нажатии пользователем клавиши с символом «С» или «с» в любой момент работы с приложением выполнялись операции, предусмотренные в обработчике события OnClick кнопки Button1. Поскольку неизвестно, какой компонент будет находиться в фокусе в момент этого события, надо перехватить его на уровне формы. Такой перехват осуществляется, если установить свойство KeyPreview в True. Тогда в обработчике события формы onKeyPress можно написать оператор
if (кеу = ‘C’ or key = 'c `') then Button1.Click;
Если пользователь ввел символ «С» или «с», то в результате будет выполнен обработчик щелчка кнопки Button1.