Главная » Уроки по ООП » Урок 18. Создание программ с использованием нескольких форм

Урок 18. Создание программ с использованием нескольких форм

Уровень 1.

Задание 1. Создание приложения с модальной формой заставки.
Ход работы:

  • Создайте новое приложение.
  • Создайте новую форму Form2. Это будет форма-заставка. Настройка свойств формы: BorderStyle=bsNone, Position=poScreenCenter.
  • Оформите форму и сделайте ее небольшого размера (Рис.1).


Рисунок 1.

  • Сделаем так, чтобы форма закрывалась сама, например, через 5 секунд. Для этого добавьте на форму компонент Timer (стр.System). Задайте свойство Interval=5000. Создайте для таймера обработчик события onTimer:

  • Теперь через 5 секунд форма-заставка будет закрываться.
  • Создайте обработчик события OnClose для второй формы:

  • Осталось создать обработчик события OnShow для главной формы Form1:

  • В разделе Uses главной формы Form1 укажите ссылку на Form2 (или в главном меню выполните команду File-Use Unit… в открывшемся окне выберите Unit2).
  • Можете сохранить проект, запустить приложение и убедиться, что все работает правильно.

Вопросы:
Что выполняет оператор Action:=caFree? Для чего он используется в событии onClose?
Для чего используется раздел Uses?

Уровень 2.

Задание 2. Создать форму запроса пароля.

  • Создайте новую форму Form3. Оформите форму, установите на нее Edit (рис.2). Установите свойства формы BorderStyle=bsDialog, Position=роScreenСenter.


Рисунок 2

  • Превратите компонент Edit в компонент для ввода пароля (PasswordChar), чтобы вместо вводимого  текста отображались звездочки.
  • Создайте обработчик события OnKeyDown этого компонента:

  • Если введен правильный пароль, то свойству ModalResult присваивается некоторое условное число — 6 (можно было бы выбрать и любое другое допустимое число, кроме 0 и 2). Если пароль неправильный, то выполняется метод Close. В обоих случаях форма закрывается, так как задание отличного от нуля положительного значения ModalResult равносильно закрытию формы. Но при правильном пароле значение ModalResult будет равно 6, а при неправильном — 2. Это значение получается при выполнении метода Close или если пользователь нажмет кнопку системного меню (кнопку с крестиком) в полосе заголовка окна.
  • Измените обработчик события OnShow главной формы:

  • Этот оператор анализирует значение свойства ModalResult формы запроса пароля. Значение этого свойства возвращает функция Form3.ShowModal. Если результат не равен 6, то был введен неправильный пароль. Тогда главная форма, а с ней вместе и приложение, закрываются методом Close. При правильном пароле можно продолжать работу приложения. Оператор ShowMessage введен просто для того, чтобы показать, как можно использовать свойство другой формы — в данном случае текст, введенный пользователем в качестве пароля. Затем следует уничтожение формы запроса пароля методом Free. Это необходимо сделать, чтобы освободить память.

Уровень 3.

Задание 3.
Описанный выше способ управления формой запроса пароля не является оптимальным. Он просто призван был показать, как можно обрабатывать величину ModalResult, возвращаемую методом ShowModal. Но то же самое можно было бы сделать и проще.
Задание – измените программу так:
в обработчике события OnKeyDown окна редактирования на форме Form3 напишите более простой оператор:

При неверном пароле этот оператор завершает работу всего приложения методом Application.Terminate.
Тогда в главной форме не надо анализировать результат работы пользователя с формой Form3, так как если приложение не закрылось при выполнении оператора ShowModal, то значит пароль введен правильный. Поэтому измените обработчик onShow главной формы:

Запустите программу и проверьте правильность ее работы.

Дополнительное задание

Проект «Расчет оплаты» . Предположим, мы хотим проверить правильность оплаты услуг за использование Интернета.  Пусть можно оплачивать либо количество «скачанных» мегабайт (трафик),  либо затраченное время в минутах, либо то и другое вместе. Нам известны цены провайдера в долларах (у.е.), и необходимо перевести общую сумму в «родную» валюту.  Нетрудно сообразить, что общую стоимость в этом случае  можно посчитать по следующей формуле:
(Число мин*Стоимость минуты в у.е. + Трафик в Мбайтах*Стоимость 1 Мбайта в у.е.)*Курс у.е.
Составим небольшую программу для подобного расчета.
Поместим на форму компоненты, которые показаны на рисунке ниже:

В текст модуля Unit1 после ключевого слова Var перед ключевым словом implementation введите описание переменных, как показано ниже:

var
Form1: TForm1;
C_time,                               // Цена за 1 минуту
C_traf,                                // Цена за 1 мегабайт
C_kurs : double;    // Курс доллара

implementation

Затем создадим обработчик события – нажатия кнопки Button1, как показано в тексте ниже:

procedure TForm1.Button1Click(Sender: TObject);
var Time, Traf, Val : double;
begin
Time:=StrToFloat(Edit1.Text);
Traf:=StrToFloat(Edit2.Text);
Val:=(C_time*Time + C_traf*Traf)*C_kurs;
Panel1.Caption:=FloatToStrF(Val, ffFixed, 10, 2);
end;

Если мы сейчас запустим программу на выполнение, то увидим, что при любых значениях, помещенных нами в поля Edit1 и Edit2 результат всегда получается нулевой. Это и понятно, ведь переменным C_timeC_traf  и C_kurs мы не присваивали никаких значений, и поэтому «по умолчанию» Delphi присвоила им значение ноль.
Можно присвоить значения данным переменным в так называемой секции инициализации модуля Unit1.
Для этого надо перед завершающим end. (с точкой) в конце модуля ввести ключевое слово initialization и затем присвоить значения переменным:
……………………
initialization
   C_time:=0.015;
   C_traf:=0.82;
  C_Kurs:=149.6;
end.
Если теперь Вы запустите программу на выполнение, то результат расчета будет правильным.
Но что делать, если цены и курс у.е. изменятся? Придется снова открывать Delphi и изменять текст программы – это неудобно.
Лучше, если мы сможем изменять цены и курс во время работы программы.
Для этого заведем для разнообразия еще одну форму.
Выберите в меню Delphi пункт File, New Form.
Поместите на новую форму компоненты, которые показаны на рисунке ниже и присвойте им необходимые свойства в инспекторе объектов:

В частности, для кнопок BitBtn1 и BitBtn2 установите их свойство Kind в значения bkOk и bkCancel соответственно.
Щелкните теперь дважды по кнопке Button2 (Параметры) первой формы и вставьте в созданный Delphi шаблон строку, показанную жирным шрифтом:
procedure TForm1.Button2Click(Sender: TObject);
begin
Form2.ShowModal;
end;
Запустите проект на выполнение.  После запуска на экране появится сообщение:

Смело щелкайте по кнопке “Yes”.
Теперь во время работы программы Вы можете щелкнуть по кнопке «Параметры» и увидите на экране вторую форму.
Закройте проект, перейдите в конструкторе на вторую форму.
В инспекторе объектов перейдите на вкладку “Events”, найдите событие OnCreate для Form2, щелкните дважды в поле ввода этого события и заполните созданный Delphi шаблон приведенными ниже строками:
procedure TForm2.FormCreate(Sender: TObject);
begin
C_time:=StrToFloat(Edit1.Text);
C_traf:=StrToFloat(Edit2.Text);
C_kurs:=StrToFloat(Edit3.Text);
end;
Щелкните также дважды на кнопке BitBtn1 и заполните созданный Delphi шаблон приведенными ниже строками:
procedure TForm2.BitBtn1Click(Sender: TObject);
begin
C_time:=StrToFloat(Edit1.Text);
C_traf:=StrToFloat(Edit2.Text);
C_kurs:=StrToFloat(Edit3.Text);
Form1.Button1.Click;
end;
Запустите проект, и убедитесь, что все работает правильно.

 

Составитель: Салий Н.А.

Яндекс.Метрика
Сайт создан в системе uCoz