Обзор дополнительных компонентов Delphi

Дополнительные кнопки Delphi (TSpeedButton и TBitBtn)

Мы уже познакомились с кнопкой TButton с вкладки Standard. В Delphi есть еще два вида кнопок на вкладке Additional— TBitBtn и TSpeedButton. Помимо простого текста, они могут содержать и изображения, разница только в том, что TBitBtn может получать фокус ввода с клавиатуры, a TSpeedButton нет.

 

Что значит "получение фокуса ввода"? Когда вы щелкаете мышью по какому-то элементу управления, то он получает фокус ввода. Например, вы щелкнули по строке ввода TEdit. После этого в ней появляется курсор для ввода текста, и все события от клавиатуры будут посылаться именно этому компоненту. Точно так же с кнопкой. Если вы щелкнули по ней, то все нажатия на клавиатуре будут посылаться кнопке. Правда, кнопка не может получать текст, но если вы нажмете клавишу
<Enter>, когда фокус находится на кнопке, то это будет равносильно щелчку по этой кнопке мышью.

Кнопка TSpeedButton не может получать фокуса. Это значит, что если вы наби­рали какой-то текст в строке ввода, а потом щелкнули по такой кнопке, то обрабо­тается соответствующее событие и фокус возвратится обратно в строку ввода. Он не останется на кнопке.

Как вы знаете, фокус выделенного компонента в программах можно менять кла­вишей <ТаЬ>. Если вы нажмете ее, то будет выделен следующий по счету компо­нент. Так вот клавишей <ТаЬ> невозможно выделить кнопку TSpeedButton.

Объект TBitBtn хорошо подходит там, где нужна кнопка с изображением, a TSpeedButton для кнопок панели инструментов, потому что такие кнопки никогда не должны получать фокуса ввода. Наверное, поэтому TSpeedButton отображается в Delphi на панели инструментов в виде квадратной кнопки, ведь на панели инст­рументов в большинстве программ кнопки квадратные.

Давайте попробуем создать небольшое приложение, в котором будут использо­ваться оба типа этих кнопок. Запустите Delphi и создайте новый проект.

Установите на форму компонент TPanei с вкладки Standard. Измените у него свойство Align на alTop, чтобы панель растянулась по верху формы. Теперь уда­лите текст в свойстве caption и измените высоту (свойство Height) на 24. Как по­казывает мой опыт, такие панели наиболее эстетичны, а кнопки получаются доста­точного для работы размера.

Установите на панель кнопку TSpeedButton и установите у нее свойства Left (левая позиция) в 0 и тор (верхняя позиция) в 1. Ширина (width) кнопки должна быть равна 23, а высота (Height) — 22. Давайте изменим имя кнопки на ExitButton, потому что по нажатии этой кнопки мы будем закрывать программу.

Если вы все сделали правильно, то у вас должно получиться нечто похожее на рис. 11.1.Обзор дополнительных компонентов Delphi

Теперь дважды щелкните по свойству Glyph, и перед вами должно открыться окно загрузки изображения (см. рис. 11.2). Нажмите на кнопку Load, и загрузите картин­ку. К Delphi прилагается большая библиотека готовых изображений. Расположены они в папке \Program Files\Common Files\Borland Shared\Images\Buttons. 

Загружаемая картинка по умолчанию должна иметь размер 16x16. Пусть будет загрузка картинки, которая идет вместе с Delphi под названием dooropen.bmp. Мо­жете сделать то же самое. Как только вы выберете картинку, нажмите ОК, чтобы закрыть окно загрузки изображения. Теперь на кнопке отображается выбранная картинка. Запустите программу, чтобы посмотреть на результат ее работы.

СОВЕТ. Вы можете заметить, что кнопка выглядит немного выпукло, а во всех совре­менных приложениях кнопки плоские и плавающие. Это легко исправить, если изме­нить свойство кнопки Flat на true.

Обзор дополнительных компонентов Delphi

Теперь создадим для кнопки событие onclick. Для этого нужно дважды щелк­нуть левой кнопкой мыши по самой кнопке или выделить ее и на вкладке Events объектного инспектора и мышью дважды щелкнуть по свойству onclick. В соз­данном обработчике события напишите код вызова метода закрытия формы:

Close;

Теперь можно запустить программу и проверить ее работу в действии.

Усложним задачу и поместим на форме еще две кнопки. Пусть они будут распо­ложены так, как это показано на рис. 11.3. В первую из них загружена картинка из файла Bulboff.bmp (BuiboffButton), а во вторую — Bulbon.bmp В скобках указаны имена кнопок.

Обзор дополнительных компонентов Delphi

Теперь установите у обеих КНОПОК СВОЙСТВО Grouplndex рав­ным 1 и у любой из них измените свойство Down на true. Таким об­разом, мы назначили этим кноп­кам один и тот же индекс группы, и они стали сгруппированными. Можно устанавливать любой ин­декс больше нуля. При нулевом значении считается, что группи­ровки нет. Кнопка, у которой свойство Down установлено в true, по умолчанию выглядит нажатой.

Попробуйте теперь запустить программу и нажимать на новые кнопки. Когда нажата одна из них, то другая автоматически отпускается. Это связано с тем, что кнопки сгруппированы и работают как одно целое.

Таким способом часто оформляют операции выравнивания. Например, в том же текстовом редакторе Word кнопки выравнивания работают именно так.

 

Возможность кнопки находиться в нажатом и нормальном состоянии появилась после того, как были сгруппированы две кнопки, путем присвоения их свойству Grouplndex значения 1. Вы можете создать еще одну группу кнопок (количество кнопок не ограничено двумя) и присвоить ей значение 2. В этом случае новая груп­па кнопок будет работать независимо от первой.

 

ВНИМАНИЕ. Свойство Down может быть равно true только у одной кнопки в группе.

Теперь установим на форму кнопку TBitBtn и назовем ее startBtn. В свойстве caption напишите слово "Старт" и загрузите сюда любую картинку. Загрузка про­исходит точно таким же образом, как и при использовании TSpeedButton.

 

Кнопки TBitBtn и TSpeedButton очень похожи и имеют практически все одина­ковые свойства и методы, поэтому больше тут сказать уже почти нечего.

Очень интересным является свойство Layout, которое показывает, где должна располагаться картинка, а где текст. На рис. 11.4 показаны разные варианты кно­пок, а снизу приписаны установленные значения в свойстве Layout.

Обзор дополнительных компонентов Delphi

Другим интересным свойством является Kind. В нем заложен список заранее подготовленных стандартных кнопок. При выборе любого из них автоматически изменяется текст и изображение на кнопке. На рис. 11.5 вы можете увидеть раз­личные кнопки и соответствующие им значения Kind. Жаль только, что текст анг­лоязычный, но его изменить очень легко. Помимо картинки и текста, изменяется свойство ModalResult — результат, который вернет кнопка для диалогового окна.

Обзор дополнительных компонентов Delphi

Давайте напишем пример, который будет запускать дочернее модальное окно по нажатии кнопки Старт.

Создайте еще одну форму. Если вы работаете в Delphi 7 и ниже, то сразу от­кройте

менеджер проектов (Project Manager), чтобы легче было переключаться между формами (для этого нужно выбрать меню View | Project Manager). Теперь установите на новую форму три кнопки. Желательно расположить их так, как это показано на рис. 11.6.

Для первой кнопки установим свойство Kind в Ькок, для второй— в bcCancel, а для третьей — bkAbort.

Теперь вернемся в первую форму (для этого дважды щелкните мышью в окне Project Manager по первой форме) и создадим обработчик события onclick для кнопки Старт. В нем нужно написать содержимое листинга 11.1.

 

procedure TMainForm.StartBtnClick(Sender: TObj ect); begin

Form2.ShowModal; // Показываю вторую форму if Form2.ModalResult=mrOk then

Application.MessageBox('Вы нажали кнопку OK', 'Вы нажали'); if Fonn2 .ModalResult=mrCancel then

Application.MessageBox('Вы нажали кнопку Cancel', 'Вы нажали'); if Form2.ModalResult=mrAbort then

Application.MessageBox('Вы нажали кнопку Abort', 'Вы нажали'); end;

 

В первой строке кода показывается вторая форма как модальное окно. Если пользователь нажмет одну из трех кнопок, модальное окно закроется и в свойстве формы Form2 .ModaiResuit будет находиться результат, который указан у нажатой кнопки в свойстве ModaiResuit. Вот именно этот результат мы проверяем после закрытия окна, и в зависимости от этого выводится на экран необходимое сообще­ние. Попробуйте запустить этот пример и посмотреть его в действии.



������� ������ ��� dle ������� ��������� ������

Помоги проекту! Расскажи друзьям об этом сайте: