
- •Объектно-ориентированное программирование
- •Оглавление
- •Лабораторная работа №1 Простой диалог Цель работы
- •Методические указания
- •1. Добавление нового компонента
- •2. Метка Label (страница Standard)
- •3. Окно редактирования Edit (страница Standard)
- •4. Кнопки Button, BitBtn (страницы Standard, Additional)
- •5. Компонент CheckBox (страница Standard)
- •6. Компоненты GroupBox, RadioButton (страница Standard)
- •7. Компонент ComboBox (страница Standard)
- •Пример выполнения задания
- •Int a, b, c; //стороны
- •Задания
- •Лабораторная работа №2 Управляющие компоненты Цель работы
- •Методические указания
- •1 . Компонент Timer (страница System)
- •If (!Str.IsEmpty()) // Если строка не пуста
- •2. Компонент PageControl (страница Win32)
- •3 . Компонент DateTimePicker (страница Win32)
- •4 . Компонент TrackBar (страница Win32)
- •5 . Компонент UpDown (страница Win32)
- •Задания
- •Лабораторная работа №3 Проектирование меню Цель работы
- •Методические указания
- •1 . Многострочные окна редактирования Memo (страница Standart) и RichEdit (страница Win32)
- •2. Создание меню с помощью мастера
- •3. Компоненты MainMenu и РоpupMenu (панель Standart)
- •4. Проектирование меню с помощью Конструктора Меню
- •5. Организация отклика на вызов пункта меню
- •6. Диалоги как модальные формы
- •7. Создание диалогового окна с помощью шаблона
- •8. Вызов диалогового окна пунктом меню
- •9. Прием введенных значений из диалогового окна в основное окно приложения
- •Задания
- •Лабораторная работа №4 Компоненты отображения данных. Вызов стандартных диалогов Цель работы
- •Методические указания
- •1. Компонент ImageList (страница Win32)
- •2. Компонент TreeView (страница Win32)
- •Int NomZach; // номер зачетной книжки
- •Int Shit; //номер читательского билета
- •3. Компонент ListView (страница Win32)
- •4. Компонент OpenDialog (страница Dialogs)
- •5. Компонент FontDialog (страница Dialogs)
- •6. Компонент ColorDialog (страница Dialogs)
- •Задания
- •Лабораторная работа №5 Подготовка справочной системы Цель работы
- •Методические указания
- •1. Создание текстового файла разделов (*.Rtf)
- •Сноска #
- •Сноска к (заглавная латинская буква)
- •2. Создание файла содержания (*.Cnt)
- •3. Создание файла проекта
- •4. Подключение справочной системы к приложению
- •Задание
- •Библиографический список
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 нужно:
в файл «MyDialog.h» дописать:
extern AnsiString stroka;
в файл «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"); }