Главная » C++, C++ Builder » Добавление кнопки C++ Builder

1

Последний штрих в этом примере — добавление на форму новой кнопки.  Создание кнопки не отличается от создания метки или поля ввода. Но нам хотелось бы знать о том, что пользователь нажимает кнопку. Для этого нам нужно уметь создавать обработчик события нажатия на кнопку и ассоциировать этот обработчик с событием OnClick.

Object Inspector, конечно, не работает для динамически созданных компонентов. Как же мы тогда ассоциируем обработчик с кнопкой? Ну, если вы помните пример Scribble3 из главы 1, мы можем модифицировать обработчик для компонента во время работы приложения. Если можно модифицировать, почему бы не добавить новый обработчик? Противопоказаний к этому нет.

Создайте обработчик события OnClick для переключателя Создать новую кнопку и добавьте в обработчик следующий код :

void __fastcall TForm1::RadioButton3Click(TObject *Sender)

{

RemoveExistingFields();

FpButton = new TButton(this); FpButton->Parent = this;

FpButton->Left = RadioButton1->Left; FpButton->Width = 200;

FpButton->Height = 20; FpButton->Top =

RadioButton3->Top + RadioButton3->Height + 20; FpButton->Visible = true;

FpButton->Caption = "Кнопка 1"; FpButton->OnClick = OnButtonClick;

}

Опять же, почти никакой разницы между случаем кнопки и предыдущими случаями. Мы устанавливаем свойства (включая важнейшее свойство Parent) таким же образом, как и для поля ввода и метки. Для кнопок нам нужно свойство Caption: это текст, который появляется на кнопке. В этом случае мы просто присваиваем этому свойству строку «Кнопка 1».

Подсвеченная строка кода важна для кнопки. Здесь мы присваиваем наш обработчик события для кнопки событию OnClick объекта-кнопки. Единственное требование к обработчику — чтобы он был нужной сигнатуры (в смысле аргументов и значения, возвращаемого функцией) для события данного типа. Для события OnClick метод должен принимать один аргумент (Sender, то есть отправитель сообщения,  типа TObject)  и  не  возвращать никакого  значения (то  есть возвращать

«пустое значение», void). Так что мы реализуем простой обработчик, вводя следующий код в исходный файл для формы:

void __fastcall TForm1::OnButtonClick( TObject *Sender )

{

MessageBox(NULL, "Вы нажали на кнопку!", "Информация",  MB_OK);

}

Заметьте, что сигнатура этого обработчика события подходит под сигнатуру, требуемую для обработчика события нажатия на кнопку. Заметьте также, что у обработчика указан модификатор

__fastcall. Этот модификатор  требуется указывать во  всех переопределениях (overrides) методов VCL. По определению обработчик события является переопределением поведения компонента и поэтому требует директивы    fastcall.

Не забудьте раскомментировать строку из заголовочного файла с прототипом нашего метода OnButtonClick, а потом скомпилируйте и запустите программу. Когда вы запустите программу и установите переключатель Создать новую кнопку, то длинная тощая кнопка появится на форме. Нажав на нее, вы получите окно с сообщением, как на рис. 4.4.

Рис. 4.4. Форма с результатом вызова динамического обработчика

Ну вот, теперь вы знаете все, что нужно для создания простого динамического управляющего элемента, присваивания его свойствам значений и обработки его событий. Не правда ли, это было не так уж и трудно?

Источник: Теллес М. – Borland C++ Builder. Библиотека программиста – 1998

По теме:

  • Комментарии

1 комментарий

  1. Руслан says:

    TButton *FpButton = new TButton(Form1); FpButton->Parent = this;

    вместо

    RemoveExistingFields();

    FpButton = new TButton(this); FpButton->Parent = this;