MDI-приложения. Mdiприложения
Скачать 4.8 Mb.
|
MDI-приложения MDI-приложенияSDI-приложение Multiple Document Interface (MDI) — способ организации графического интерфейса пользователя, предполагающий использование оконного интерфейса, в котором большинство окон расположены внутри одного общего окна. Этим он и отличается от SDI, в котором окна располагаются независимо друг от друга. MDI-приложение В родительской форме свойство FormStyle устанавливается в fsMDIForm, а в дочерней – fsMDIChild. обработчик может иметь вид: класс_дочерней_формы * имя = new класс_дочерней_формы (Application);if (!имя) return;имя->Show();Например, мы создали родительскую форму, содержащую раздел меню Окно->Новое и дочернюю форму с именем FDoc, имеющую тип TFDoc. В модуль родительской формы необходимо вставить директиву препроцессора, подключающую заголовочный файл дочерней формы. А в обработчике события, связанного с выбором пользователем раздела Окно->Новое, можно написать следующий код: TFDoc * TF=new TFDoc(Application); if (!TF) return; … TF->Show(); Свойство MDIChildCount определяет количество открытых дочерних окон. Пример: TF->Caption="Документ "+IntToStr(MDIChildCount); Свойство MDIChildren[i] дает доступ к i-тому окну (окна индексируются в порядке их создания, последнее созданное окно имеет индекс 0). Пример: из родительской формы Form1 закрыть все дочерние окна, начиная с последнего for (int i=MDIChildCount-1;i>=0;i--) MDIChildren[i]->Close(); Метод Cascade располагает все открытые окна каскадом. Метод Tile располагает окна мозаикой. При этом учитывается свойство родительской формы TileMode. Если оно равно tbVertical – упорядочивание по вертикали, tbHorizontal – по горизонтали. Метод ArrangeIcons упорядочивает расположение пиктограмм свернутых окон. Упорядочивание окон«Каскад» «По вертикали» «По горизонтали» «Значки» Пример приложения с интерфейсом множества документов – простой многооконный редакторПостроим дочерние окна с использованием компонентов TRichEdit. 1. Назвать форму FDoc. 2. Поместить на форму компонент RichEdit1 типа TRichEdit. RichEdit1->Align=alClient; 3. Поместить на форму компоненты TOpenDialog и TSaveDialog. Свойство DefaultExt задать rtf. Свойство Fitler – "текстовые файлы", установив для этого шаблоны *.rtf, *.txt: и "все файлы" – *.* 4. Поместить на форму компонент TMainMenu. Создать следующие элементы меню: Файл (Name=MFile), подпункт Открыть (Name=MOpen) и Сохранить как… (Name=MSave). 5. Создать обработчики событий: для MOpen if (OpenDialog1->Execute()) {RichEdit1->Clear; RichEdit1->Lines->LoadFromFile(OpenDialog1->FileName); } для MSave if (SaveDialog1->Execute()) { RichEdit1->Lines->SaveToFile(SaveDialog1->FileName); } 6. Сохранить проект, дав имя модулю реализации UDoc. 4. Поместить на форму компонент TMainMenu. Создать следующие элементы меню: Файл (Name=MFile), подпункт Открыть (Name=MOpen) и Сохранить как… (Name=MSave). 5. Создать обработчики событий: для MOpen if (OpenDialog1->Execute()) {RichEdit1->Clear; RichEdit1->Lines->LoadFromFile(OpenDialog1->FileName); } для MSave if (SaveDialog1->Execute()) { RichEdit1->Lines->SaveToFile(SaveDialog1->FileName); } 6. Сохранить проект, дав имя модулю реализации UDoc. Спроектируем родительскую форму. 7. Изменить свойство формы FDoc: FormStyle=fsMDIChild; 8. Создать в проекте новую форму с именем FMDI. Сохранить в проекте модуль реализации с именем UMDI. 9. Изменить свойство формы FMDI FormStyle=fsMDIForm; WindowState=wsMaximized; 10. Подключить форму FMDI к проекту: в файле реализации UDoc: #include "UMDI.h" 11. Исключить форму FDoc из числа автоматически создаваемых (Project->Options). 12. Поместить на форму FMDI компонент TMainMenu и создать меню следующего вида: Окно (Name=MWind) Новое (Name=MNew) Каскад (Name=MCascade) Упорядочить по горизонтали (Name=MHor) Упорядочить по вертикали (Name=MVert) Упорядочить значки (Name=MIcons) Установить свойство WindowMenu=MWind 13. Установить для всех разделов и подразделов свойство GroupIndex>0 14. Создать обработчики событий: для MNew {TFDoc *TF=new FDoc(Application); if(!TF) return; TF->Caption="Документ "+IntToStr(MDIChildCount); TF->Show();} для MHor TileMode=tbHorizontal; Tile(); для MVert TileMode=tbVertical; Tile(); для MCascade Cascade(); для MIcons ArrangeIcons(); Реализовать рассмотренный пример |