Лабораторная работа №3. Работа с кнопками в Delphi Цель работы: Познакомиться с возможностями Delphi по созданию и программированию кнопок в приложениях. Основные понятия: Кнопки являются элементами управления и служат для выдачи команд на выполнение определённых функциональных действий, поэтому часто их ещё называют командными кнопками. На поверхности кнопки могут располагаться текст и/или графическое изображение. Система Delphi предлагает несколько компонентов, представляющих собой различные варианты кнопок: стандартная кнопка – Button; кнопка с рисунком– BitBtn; кнопка быстрого доступа – SpeedButton. Различия в облике и функциональных возможностях между разными вариантами кнопок незначительны. Стандартная кнопка, или просто кнопка, представлена в Delphi компонентом Button, который является оконным элементом управления и располагается на странице Standard Палитры компонентов. Кнопка Button может иметь на поверхности надпись (свойство Caption), обозначающую назначение кнопки или описание действий, выполняемых при её нажатии (рис. 1). Рисунок 1 – Стандартная кнопка В отличие от большинства других видимых компонентов кнопка являем элементом операционной системы Windows и поэтому не может изменять свой цвет произвольным образом, она меняет его вместе с изменением палитры Windows. Кнопка всегда имеет системный цвет clBtnFace и не имеет свойство Color. Шрифт надписи на кнопке может менять свой стиль и размер, но компонент игнорирует изменение его цвета. Основным для кнопки является событие OnClick, возникающее при её нажатии. При этом кнопка принимает соответствующий вид, подтверждая происходящее действие визуально. Действия, выполняемые в обработчике события OnClick, происходят сразу после отпускания кнопки. Кнопку можно нажать следующими способами: щелчком мыши; выбором комбинации клавиш, если она задана в свойствах кнопки; нажатием клавиш Enter или Пробел; нажатием клавиши Esc. На нажатие клавиш Enter или Пробел реагирует кнопка по умолчанию, т. е. находящаяся в фокусе кнопка, заголовок которой выделен пунктирным Высокоуровневые методы информатики и программирования прямоугольником (рис. 2). Для назначения кнопки по умолчанию в её свойствах для параметра Default типа Boolean установлено в значение True (Истина). Рисунок 2 – Кнопка по умолчанию (Отмена) Событие OnClick может генерироваться для кнопки и в случае нажатия клавиши Esc, что обычно реализуется для кнопок, связанных с отменой какого-либо действия, например, кнопка Cancel (Отмена) в диалоговом окне. Чтобы кнопка реагировала на нажатие клавиши Esc, необходимо её свойство Cancel типа Boolean установить в значение True (Истина). Графические кнопки. Delphi позволяет создавать кнопки с рисунком (графические), для чего используется компонент BitBtn, расположенный на странице Additional Палитры компонентов. Отличительной особенностью графической кнопки от стандартной в том, что помимо заголовка на ней можно отобразить растровое изображение. Для размещения изображения на поверхности кнопки BitBtn используется свойство Glyph. Рисунок может содержать до трех отдельных изображений (глифов). Какое именно изображение выводится на кнопке, зависит от её текущего состояния: первое изображение отображается, если кнопка не нажата (по умолчанию); второе изображение отображается, если кнопка неактивна и не может быть выбрана; третье изображение отображается, когда кнопка нажата (выполнен щелчок). При использовании нескольких изображений они должны быть подготовлены и сохранены в одном файле формата BMP. Все отдельные изображения в рисунке должны располагаться без промежутков в горизонтальной строке и иметь одинаковую высоту и ширину (как правило, 16х16 пикселей). Количество изображений указывается в свойстве NumGlyph. Delphi предлагает для кнопки BitBtn несколько предопределённых видов (рис. 3), выбираемых с помощью свойства Kind. Для задания вида кнопки могут использоваться следующие константы: bkСustom – на кнопке имеется выбранное изображение; первоначально изображение отсутствует и его нужно загружать дополнительно; bкOK – на кнопке зеленая галочка и текст ОК; свойство Default кнопки установлено в значение True (Истина); bkCancel – на кнопке красный знак X и текст Cancel; свойство Cancel кнопки установлено в значение True (Истина); 2 Высокоуровневые методы информатики и программирования bkYes – на кнопке зеленая галочка и текст Yes; свойство Default кнопки установлено в значение True (Истина); bkNo – на кнопке красная перечеркнутая окружность и текст No; свойство Cancel кнопки установлено в значение True (Истина); bkHelp – на кнопке сине-зеленый вопросительный знак и текст Help; bkClose – на кнопке дверь с обозначением выхода и текст Close; при нажатии кнопки форма автоматически закрывается; bkAbort – на кнопке имеются красный знак X и текст Abort; bkRetry – на кнопке имеются зеленая стрелка повтора операции и текст Retry; bkIgnore – на кнопке зеленый человечек и текст Ignore; bkAll – на кнопке двойная зеленая галочка и текст All. Рисунок 3 – Предопределённые виды кнопок BitBtn По умолчанию свойство Kind имеет значение bkCustom, и пользователь может сам выбирать изображение, управляя свойством. Расположением изображения на поверхности кнопки относительно текста можно управлять, для чего используется свойство Layout (рис. 4). Данное свойство может принимать следующие значения: blGlyphLeft – изображение слева от текста (по умолчанию); blGlyphRight – изображение справа от текста; blGlyphTop – изображение над текстом; blGlyphBottom – изображение под текстом. Рисунок 4 – Варианты размещения изображения Кнопки быстрого доступа. Для создания кнопки быстрого доступа служит компонент SpeedButton, расположенный на странице Additional Палитры компонентов. Компоненты SpeedButton и BitBtn схожи и имеют одинаковые свойства. Основное отличие компонента SpeedButton от BitBtn в том, что кнопка SpeedButton не может получать фокус ввода с клавиатуры. Это значит, что если набрать какой-то текст в строке ввода, а затем щёлкнуть по такой кнопке, то обработается соответствующее событие и фокус вернётся обратно в строку ввода. 3 Высокоуровневые методы информатики и программирования Ещё одной особенностью кнопки SpeedButton является возможность их фиксации в нажатом положении, для этого используются логическое свойство Down. По умолчанию фиксация в нажатом положении не поддерживается. Для включения этой возможности используется свойство GroupIndex (должно иметь значение больше 0). Кнопки, имеющие одинаковое значение этого свойства, образуют группу, в которой может быть нажата только одна кнопка. Порядок выполнения работы 1. Запустите Delphi. Создайте новый проект. 2. Назовите форму MainForm с заголовком Главная. Сохраните проект в папку D:\Users\...\Lab3\.... Окно сохраните под именем MainUnit, а проект под именем MyButton. 3. Создайте вторую форму. Назовите форму NewForm с заголовком Окно. Сохраните её под именем NewUnit. 4. Создайте третью форму. Назовите форму AboutForm с заголовком О программе. Сохраните её под именем AboutUnit. 5. На форме Главная создайте главное меню: в меню создайте пункты Окно, О программе и Закрыть; в меню Окно создайте пункты Открыть и Размер; для пункта Размер создайте подменю с пунктами Большое, Среднее и Маленькое; 6. Задайте для меню комбинацию клавиш: для пункта Открыть – Ctrl+N; для пункта О программе – Ctrl+O; для пункта Закрыть – Ctrl+E. 7. Запрограммируйте меню, чтобы: при выборе пункта Открыть открывалось форма Окно; при выборе пункта О программе открывалось форма О программе; при выборе пункта Закрыть программа закрывалась. 8. Сделайте, чтобы при выборе в меню Размер: пункта Большое форма Окно принимала ширину – 800, высоту – 600; пункта Среднее форма Окно принимала ширину – 600, высоту – 400; пункта Маленькое форма Окно принимала ширину – 400, высоту – 200. 9. На форме Главная создайте шесть кнопок быстрого доступа с надписями: Красный, Жёлтый, Синий, Зелёный, Белый и Черный. 10. Сделаем, чтобы при нажатии кнопок форма принимала соответствующий цвет. В процедуру обработки для кнопки Красный введите код: MainForm.Color := clRed; 4 Высокоуровневые методы информатики и программирования Аналогично запрограммируйте остальные кнопки. 11. Сделайте, чтобы все кнопки образовывали группу и одна из них была в фиксированном нажатом состоянии. 12. Запустите проект, посмотрите, как работают кнопки. 13. Чтобы цвет формы при запуске был как у нажатой кнопки, для формы в обработчик события OnShow введите проверку условия: If SpeedButton1.Down Then MainForm.Color := clRed; If SpeedButton2.Down Then MainForm.Color := clYellow; … (допишите сами). Вкладка События 14. На форме Окно создайте графическую кнопку с надписью Закрыть: назовите её btZak; кнопку сделайте с рисунком. Для создания рисунка используйте Paint. Размер рисунка – 16х16 пикселей. Сохраните его в папку с проектом; сделайте, чтобы рисунок был над надписью; запрограммируйте кнопку, чтобы при её нажатии окно закрывалось; сделайте, чтобы кнопка реагировала на нажатие клавиши Esc. 15. Создайте на форме две графических кнопки с надписями Не активная и Активная: кнопки сделайте с рисунками; сделайте, чтобы рисунок был справа; запрограммируем кнопку Не активная, чтобы при её нажатии кнопка Закрыть становилась не активной, для этого в обработчик события введите код: btZak.Enabled := False; запрограммируйте кнопку Активная, чтобы при её нажатии кнопка Закрыть становилась активной. 16. На форме О программе: создайте надписи: своё Ф.И.О., группу, № лабораторной работы, год; измените размер и цвет надписей; создайте графическую кнопку с предопределённым видом Close. 17. Для формы О программе создайте контекстное меню, с помощью которого можно было бы менять цвет формы. 18. Сохраните и запустите проект на выполнение. 19. Закройте Delphi. 5