Кнопка (Button)

Кнопки на рабочей поверхности приложения играют такую же роль, что и кнопки в жизни – нажатием на них инициируется некоторое действие. В интерфейсе пользователя Windows-приложения есть несколько кнопок разного назначения (например, позицию переключателя также называют кнопкой выбора). Стандартная командная кнопка С++Builder относится к независимым элементам – её можно поместить на любое место формы и пользоваться её событием Click (щелчок), как заблагорассудится. Факт щелчка на ней кнопка обозначает тем, что изображает “нажатие”.

 

Таблица свойств для Button

Свойства Описание
Cancel Отмена. Только одна из кнопок формы может иметь значение этого свойства True. Это должна быть кнопка, выполняющая функции кнопки Cancel (отмена). При Cancel = True нажатие клавиши <Esc> генерирует событие Click для этой кнопки вне зависимости от того, какому из элементов формы принадлежит фокус.
Caption Задаёт текст надписи на поверхности кнопки.
Default Выполнить. Аналогично свойству Cancel, только для кнопок ОК (реагирующих на клавишу Enter).
Enabled Разрешено. Булево значение, содержащееся в этом свойстве, разрешает или запрещает функционирование управляющего элемента (объекта) в плане пользовательского ввода. При Enabled = False элемент не реагирует на действия пользователя.

Однострочный редактор (Edit)

Этот компонент служит для отображения одной строки текста с возможностью редактирования. В Windows поддерживаются операции выделения текста, копирования, удаления, которые могут выполняться как с помощью клавиатуры, так и с помощью мыши.

 

Таблица свойств для Edit

Свойства Описание
AutoSelect Если значение этого свойства равно True, то при получении объектом фокуса ввода, содержимое окна редактирования будет выделено, если False – то не выделено.
AutoSize Указывает на необходимость изменения размера компонента при изменении размера шрифта
BorderStyle Здесь выбирается стиль обрамления Edit
CharCase Используется для изменения регистра символов, содержащихся в текте. Значение ecNormal задаёт нормальный режим ввода. Значение ecLowerCase задаёт ввод символов только нижнего регистра, а значение ecUpperCase – только верхнего регистра.
Color Определяет цвет, которым изображается элемент Edit на экране.
Enabled Разрешено. Булево значение, содержащееся в этом свойстве, разрешает или запрещает редактирование текста в окна Edit.
MaxLength Позволяет ограничивать число вводимых пользователем символов (для этого нужно присвоить этому свойству необходимое значение)
ReadOnly Позволяет отображать текст без возможности редактирования, если значение этого свойства равно True (по умолчанию оно равно – False).
Text Определяет тот текст, который будет выведен в окне Edit при запуске программы. Используется для доступа к содержимому компонента Edit.

 

Пример.Потребуется три объекта: список, поле редактора и кнопка. Перенесем компоненты на форму проектирования. Метод перетаскивания (drag-and-drop) чисто интуитивен и состоит в следующих действиях: нажмите левую кнопку мыши на выбранном элементе, переведите курсор на любое место формы, а затем снова щёлкните мышью. Будем использовать “стандартные” компоненты Палитры [3]:

 

· Выберите вкладку Standard.

· Перетащите компонент списка TListBoxна форму.

· Перетащите компонент редактируемого ввода TEditBox.

· Перетащите компонент кнопки TButton.

· С помощью инспектора объектов определите начальные значения свойств компонентов. В графе свойства значений Items списка ListBox1 кнопку (TStrings) и в открывшемся окне редактора введите семь первых строк стихотворения. В свойстве Caption формы Form1 и кнопки Button1 укажите те их смысловые названия (соответственно, “Десять негритят”, “Результат”). В свойстве Text поля редактирования Edit1 напишите строку подсказки результата (“Десять негритят”).

· Расположите компоненты и измените их размеры так, как вы хотели бы их видеть в окне вашего редактора.

Рис.3. показывает вид формы приложения и свойства списка ListBox1 после выполнения указанных действий. Теперь можно переключиться на Редактор кода и написать программу.

 

 

 

Рис3.Визуальное проектирование формы

 

Обратите внимание, что присвоение значения true свойству Sorted вызовет лексиграфическое упорядочивание списка ListBox1 уже на стадии проектирования.

· В инспекторе объектов укажите вкладку События (Events), чтобы увидеть все события, ассоциированные с выбранным объектом.

· Дважды щёлкните мышью по кнопке “Результат”. В открывшемся окне Редактора кода курсор покажет позицию для ввода инструкций в тело обработчика события OnClick, возникающего при нажатии кнопки Button1.

Рис.4 показывает простой код, который в ответ на очередное нажатие кнопки “Результат” присоединяет предыдущую подсказку prev к концу списка и заносит следующую подсказку next в поле редактирования.

 

 

Рис.4.Редактор кода обеспечивает ввод и редактирование текста программы

 

Инструкция ListBox1->Items->Append(prev) добавляет методом Append строку prev к списку ListBox1. Операция Edit1->Text = next присваивает строку next объекту редактируемого ввода Edit1. Строки подсказок в двумерном массиве count индексируется целой переменной типа static, сохраняющей текущие значения между вызовами процедуры ButtonClick обработки события OnClick.

· Командой главного меню Run | Run запустите процесс компиляции, сборки и прогона примера.

· Несколько раз нажмите на кнопку “Результат”.

Рис.5 показывает содержание формы приложения после девяти нажатий на кнопку “Результат”. Чтобы игнорировать последующие нажатия кнопки, в обработчике события предусмотрена инструкция возврата по условию if (i == 9).

 

 

 

Рис.5. Работа первой версии приложения “Десять негритят”

 

· Откройте контекстное меню Редактора кода щелчком правой кнопки мыши, а затем с помощью опции Open Source/Header File переключитесь на интерфейсный файл Unit1.h.

· Организуйте экранное отображение инструментов так, чтобы одновременно видеть проектируемую форму и файл Unit1.hв окне Редактора кода.

· Перетащите ещё один компонент кнопки TВuttonна форму. В свойстве Caption кнопки укажите её смысловое название “Новый куплет”.

 


Рис.6. C++Builder автоматически генерирует интерфейсный модуль

 

Проследите за тем, что , как только вы перенесли кнопку на форму, объявление объекта TButton2 моментально появится в модуле Unit1.h, а определение события OnClickсгенерирует объявление метода Button2Click обработчика этого события (Рис.6). такая синхронизация процессов проектирования формы и автоматической генерации кода действительно ускоряет визуальную разработку С++, сохраняя постоянный контроль над исходным текстом.

Сделаем ещё один шаг в разработке приложения – заставим его составлять куплеты автоматически. Для этого придётся наполнить содержанием обработчик события OnClick, возникающий при нажатии кнопки “Новый куплет”.

 


Рис.7. Новый обработчик события в файле Unit1.cpp

 

Рис.7 показывает простой код, который в ответ на очередное нажатие кнопки “Новый куплет” выводит друг за другом семь строк нового куплета, причём первая и третья строки берутся по переменной prev. Поскольку значение этой переменной присваивает обработчик события “Результат”, пришлось переопределить её в секции public пользовательских объявлений класса формы (выделенная на рис.6 строка). При этом переменная становится доступной обработчикам событий обеих кнопок [3].

 

 

Рис.8. Работа законченной версии приложения “Десять негритят”

 

Рис.8 показывает работу законченной версии приложения “Десять негритят” после девяти парных нажатий на кнопки “Результат” и “Новый куплет”. Список автоматически приобретает вертикальную линейку прокрутки, с помощью которой можно просматривать всё стихотворение.

 

 

Контрольные вопросы

 

1. Назначение свойств Name и Caption и различие между ними.

2. Для чего служит кнопка Button?

3. Какое свойство разрешает или запрещает функционирование управляющего элемента в плане пользовательского ввода?

4. Как изменить цвет управляющего элемента?

5. Как запустить программу на выполнение?

6. Назначение оператора Close().

7. Как сохранить вновь созданный проект?

8. Для чего служит текстовый редактор?

9. Какие операции, поддерживающие Windows можно выполнять в редакторе Edit?