Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Визуальное программирование Delphi.doc
Скачиваний:
71
Добавлен:
05.06.2015
Размер:
603.65 Кб
Скачать

7. Создание диалогового окна с помощью шаблона

Диалоговое окно можно создавать вручную, т.е. создать новую форму, используя команду «New Form» из главного меню «File», разместить на ней необходимые компоненты, определить действия, обработчики событий и т.д., а можно воспользоваться заготовками диалогов из шаблона. Шаблон позволяет вставить в приложение заготовку нового диалогового окна, на котором уже размещены типовые кнопки, чаще всего встречающиеся в диалогах, такие как OK, Cancel, Help; и для которого уже заданы некоторые свойства.

Чтобы вставить в приложение диалог из шаблона необходимо:

  • вызвать команду «New…» из главного меню «File»

  • в появившемся окне «New Items» перейти на страницу «Dialogs»

  • выбрать нужный шаблон, например, StandardDialog или запустить мастер DialogWizard, который, запрашивая пользователя, за несколько шагов конструирует новое диалоговое окно.

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

В процессе проектирования часто бывает, что главная форма скрывает за собой диалоговую. Чтобы выбрать скрытую форму можно использовать комбинацию клавиш «Shift+F12».

8. Вызов диалогового окна пунктом меню

Для вызова диалогового окна пунктом меню необходимо в обработчике события OnClick пункта меню делать диалоговое окно видимым. Как отмечалось, чаще всего для диалоговых окон используют метод ShowModal, который позволяет открыть форму как модальную.

  • Пример:

Используя шаблон, добавим в приложение диалоговое окно OKRightDlg. Для вызова диалога пунктом меню CallDlg обработчик события OnClick должен иметь следующий вид:

procedure TForm1.CallDlgClick(Sender : TObject)

begin

OKRightDlg.ShowModal; // открытие формы OKRightDlg как модальной

end; // обработка результата закрытия диалоговой формы

9. Прием введенных значений из диалогового окна в основное окно приложения

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

Пример:

Пусть на основной форме имеется компонент Memo1, в который должна добавляться строка из окна редактирования Edit1 диалога.

При нажатии кнопки ОК на диалоге его свойство ModalResult станет равным свойству ModalResult кнопки, а так как это свойство для кнопки отлично от нуля (от mrNone), а именно равно mrOK=1, то диалоговое окно закроется, но его свойство ModalResult останется доступным.

Проверяя это свойство в обработчике OnClick пункта меню можно узнать, какую кнопку нажал пользователь. Если он нажал ОК, то необходимо в Memo1 добавить строку stroka. Обработчик события OnClick для раздела меню CallDlg должен выглядеть следующим образом:

procedure TForm1.CallDlgClick(Sender : TObject)

begin

OKRightDlg.ShowModal;

If (OKRightDlg.ModalResult=mrOk)

then Memo1.Lines.Add(OKRightDlg.Edit1.Text);.

end;

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

OKRightDlg.Destroy;

  • Пример программы «Анкета»:

Будем запрашивать у пользователя данные о ФИО и дате рождения и заносить их в общую таблицу.

Поместим на форму MyForm компоненты

  • Memo1

  • MainMenu1

С помощью конструктора добавим в меню пункт <Добавить строку>. Для этого

    • Щелкнем 2 раза на компоненте MainMenu1

    • Заполним свойсто Caption первого раздела: &Добавить строку

Создадим диалоговую форму для ввода данных. File  New Form. Поместим на нее компоненты:

  • Label1 – Caption = Фамилия

  • Edit1

  • Label2 – Caption = Имя

  • Edit2

  • Label3 – Caption = Отчество

  • Edit3

  • Label4 – Caption = Дата рождения

  • DateTimePicker1

  • Button1 – Caption = Ввод, ModalResult = MrOk

  • Button1 – Caption = Отмена, ModalResult = MrCancel

Определим переменную для передачи данных из диалоговой форму в главную в виде записи:.

В файле Unit1.pas напишем

Type

TNewMan = record

Fam, Name, Otch : string;

Date : TDateTime;

end; ;

var

NewMan: TNewMan;

Для связи форм в файле Unit1.pas:

uses Unit2;

Для вызова диалоговой формы при нажатии пункта меню и принятия из нее данных в обработчике этого события (щелкнуть на пункте меню) напишем:

Form2 := TForm2.Create;

Form2.ShowModal;

if (Form2.ModalResult=mrOk)

then

begin

NewMan.Fam := Form2.Edit1.Text;

NewMan.Name := Form2.Edit2.Text;

NewMan.Otch := Form2.Edit3.Text;

NewMan.Date := Form2.DateTimePicker1.DateTime;

Str := NewMan.Fam + ‘ ’ + NewMan.Name + ‘ ‘ + NewMan.Otch + ‘#13#10’ +

+ DateTimeToString(NewMan.Date)+ ‘#13#10’;

Memo1.Lines.Add(Str);

end;

Создадим в текущем каталоге файл “Anketa.txt” (ФайлСоздатьТекстовый документ) и добавим операторы для считывания данных из файла при начале работы и записи в файл при завершении.

procedure TForm1.FormCreate(Sender : TObject)

begin

Memo1.Lines.LoadFromFile(‘Anketa.txt’);

end;

procedure TForm1.FormClose(Sender : TObject, &Action : TCloseApplication)

begin

Memo1.Lines.SaveToFile("Anketa.txt");

end;