Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
New_Metod Builder.doc
Скачиваний:
8
Добавлен:
10.11.2019
Размер:
652.8 Кб
Скачать

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

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

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

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

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

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

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

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

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

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

  • Пример:

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

void __fastcall TForm1::CallDlgClick(TObject *Sender)

{ OKRightDlg->ShowModal(); // открытие формы OKRightDlg как модальной

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

}

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

Обмен данными между окнами можно осуществлять через глобальные переменные. Описать глобальную переменную нужно в заголовочном модуле диалога, имеющим расширение «.h» (быстро открыть заголовочный модуль можно нажав <Ctrl>+F6), а определить – в основном модуле диалога, имеющим расширение «.cpp».

  • Пример:

Для рассмотренного в пункте 6 примера для описания глобальной переменной строка типа AnsiString нужно:

  1. в файл «MyDialog.h» дописать:

extern AnsiString stroka;

  1. в файл «MyDialog.cpp» -

AnsiString stroka;

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

void __fastcall TOKRightDlg::OKBtnClick(TObject *Sender)

{ stroka = Edit1->Text; }

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

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

void __fastcall TForm1::CallDlgClick(TObject *Sender)

{ OKRightDlg->ShowModal();

if (OKRightDlg->ModalResult==mrOk) Memo1->Lines->Add(stroka);

}

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

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

Поместим на форму 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

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

В файле Unit2.h (для вызова Ctrl+F6) напишем

struct TNewMen

{ AnsiString Fam, Name, Otch;

TDateTime Date;

};

extern TNewMen NewMen;

extern AnsiString Str;

В файле Unit2.cpp:

TNewMen NewMen;

extern AnsiString Str;

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

#include “Unit2.h”;

Для записи данных в переменную в обработчике события OnClick для Button1 напишем

NewMen.Fam=Edit1->Text;

NewMen.Name=Edit2->Text;

NewMen.Otch=Edit3->Text;

NewMen.Date=DateTimePicker1->Date;

Str = NewMen.Fam+' '+NewMen.Name+' '+NewMen.Otch+' '+

NewMen.Date.FormatString("ddddd");

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

Form2->ShowModal();

if (Form2->ModalResult==mrOk) Memo1->Lines->Add(Str);

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

void __fastcall TForm1::FormCreate(TObject *Sender)

{ Memo1->Lines->LoadFromFile("Anketa.txt");}

void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)

{ Memo1->Lines->SaveToFile("Anketa.txt"); }

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]