Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа№3.doc
Скачиваний:
4
Добавлен:
28.08.2019
Размер:
457.73 Кб
Скачать

Основные события компонента tButton:

OnClick – происходит при нажатии кнопки мышки.

OnEnter – происходит при получении фокуса ввода.

Шаг 17. Откройте заголовочный файл формы Uint1.h и убедитесь, что после метки __published: добавлена строка TButton *Button1;

Ш

аг 18. В Инспекторе объектов задайте свойству Caption значение “суммировать”:

Шаг 19. Теперь необходимо определить функции отклика на соответствующие события. Начните с отклика на нажатие кнопки на второй форме. Для этого перейдите в Инспекторе объектов на вкладку Events (события):

И двойным щелчком левой кнопки мыши на поле OnClick, соответствующего событию нажатия кнопки, откройте функцию отклика в файле Uint2.cpp:

Шаг 20. Добавьте следующий код в тело функции отклика:

Шаг 21. Рассмотрите назначение и последовательность операторов:

  1. Объявите целую переменную статического типа

static int sum=0;

  1. Объявите символьный массив

char s[80];

  1. Объявите целую переменную

int a;

  1. Введите из поля редактора текста с указателем Edit1 текстовую строку, которую необходимо преобразовать к целому числу. Для этого воспользуйтесь знакомой функцией ввода из символьной строки sscanf(), объявленнной в файле stdio.h

sscanf(Edit1->Text.c_str(),"%d",&a);

  1. Обратите внимание на запись Edit1->Text.c_str().

Когда компонента перенесена на поле формы, то динамически создается объект класса ТEdit1. Указатель на этот объект с именем Edit1 передается в приложение и объявляется в заголовочном файле формы Uint2.h после метки __published: TEdit *Edit1;

Указатель Edit1 является член-данным класса TForm2 второй формы и доступен каждой функции класса TForm2, в том числе и функциям отклика. Поскольку объект класса ТEdit1 задается через указатель Edit1, то доступ к членам класса ТEdit1 должен осуществляться через операцию (->). Text является свойством класса ТEdit1, поэтому запись Edit1->Text означает чтение значения этого свойства. Любые изменения текста в поле компоненты Edit1 приведут к изменению значения свойства Text.

Текст читается из поля редактора текста в формате AnsiString. Для того, чтобы его преобразовать к формату обычной символьной строки, необходимо использовать функцию c_str(). Таким образом, запись Edit1->Text.c_str() соответствует значению свойства Text в формате обычной символьной строки.

  1. Найдите сумму

sum=sum+a;

  1. Выведите сумму в символьную строку s

sprintf(s,"%d", sum);

  1. Присвой те значение символьной строки свойству Text

Edit2->Text = s;

Внимание! Не забудьте подключить знакомый файл stdio.h:

Шаг 22. Обратите внимание на то, что объявление функции Button1Click()

void __fastcall Button1Click(TObject *Sender);

вставлено в описание класса TForm1 автоматически.

Ш аг 23. Перейдите к первой форме и добавьте обработчик события OnClick (нажатие любой кнопки мыши). Для этого в Инспекторе объектов щелкните мышью на вкладке Events, а затем на правом поле события OnClick:

Откликом на событие должен быть показ второй формы. Для этого нужно вызвать метод формы Show(), если форму необходимо показать немодально, или ShowModal(), если – модально. Добавьте вызов второй формы, как

Form2->Show();

Шаг 24. Теперь необходимо подключить вторую форму к первой. Для этого необходимо подключить заголовочный файл второй формы к файлу Uint1.cpp первой формы. Это можно сделать вручную, добавив строку

#include "Uint2.h"

Кроме того, подключить форму Form2 к форме Form1 можно командой главного меню File | Include Unit Hdr... При этом окно файла Uint1.cpp формы Form1 в редакторе кода должно быть активным. В появившемся диалоговом окне нужно выбрать заголовочный файл Uint2.h, соответствующий подключаемой форме.

В файле Uint1.cpp автоматически добавится необходимая строка:

#include "Uint2.h"

Ш аг 25. Теперь для первой формы добавьте обработчик события OnDestroy, соответствующий закрытию главной формы, а, следовательно, и закрытию приложения.

Для корректного закрытия приложения необходимо вызвать функцию Terminate() класса ТАpplication. Для этого в функцию отклика добавьте строку:

A pplication->Terminate();

Шаг 26. Сохраните проект и запустите приложение на выполнение. Вы увидите главную форму приложения. Щелкните кнопкой мыши на поле формы, чтобы реализовать сценарий работы с приложением. Появится вторая форма приложения. Наберите нужное число, например, 25 в поле первого редактора текста и щелкните мышью на поле кнопки:

Шаг 27. Попробуйте изменять значения свойств из приложения. Например, измените цвет поля «Результат». Это можно сделать в конструкторе второй формы, добавив строку

Edit2->Color=clGreen;

Шаг 28. Запустите приложение на выполнение и, щелкнув мышью на поле первой формы, получите измененную вторую форму:

Шаг 28. Закройте приложение и для компоненты Edit2 второй формы установите свойство Visible в значение false,

т .е. компонент Edit2 должен быть невидимым при появлении второй формы. Запустите приложение на выполнение и покажите вторую форму, на которой компонент Edit2 не будет показан:

Шаг 29. Закройте приложение и измените отклик на нажатие кнопки так, чтобы компонента Edit2 становилась видимой и в ее поле результат появляется только тогда, когда в поле Edit1 набрано число, большее 10. Запустите приложение на выполнение. Если число больше 10, например, 25, то появится компонента Edit2 c результатом. Если число меньше 10, то компонента Edit2 станет опять невидимой:

Шаг 30. Добавьте две строки в код функции отклика на нажатие кнопки так, чтобы изменялся шрифт и размер надписи на кнопке, если число больше 10:

Button1->Font->Name="System";

и восстанавливался, если число будет меньше 10:

Button1->Font->Name="MS Sans Serif";

Окончательно функция отклика будет такой:

//-------------------------------------------------------------------

void __fastcall TForm2::Button1Click(TObject *Sender)

{

static int sum = 0;

char s[80];

int a;

sscanf (Edit1->Text.c_str(),"%d",&a);

sum=sum+a;

if (a >= 10)

{

Edit2->Visible = true ;

Button1->Font->Name="System";

}

else

{

Edit2->Visible = false;

Button1->Font->Name="System";

}

sprintf (s,"%d",sum);

Edit2->Text = s;

}

//-------------------------------------------------------------------

Шаг 31. Запустите приложение на выполнение. Если число больше 10, то шрифт изменится. Если число меньше 10, то шрифт надписи на кнопке восстанавливается. Если ввести значение 7, то результат не появится, но шрифт надписи на кнопке изменится: