MDI - многодокументный интерфейс
Основный стиль интерфейсов пользователя. Текстовый редактор и контейнер для форм, меню команд и режим проектирования. Создание нового экземпляра формы и помещение управляющего элемента в режиме выполнения. Показ на экране окна нового документа.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | лекция |
Язык | русский |
Дата добавления | 13.02.2012 |
Размер файла | 17,8 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
MDI - Многодокументный интерфейс
MDI - Многодокументный интерфейс
Существуют два основных стиля интерфейсов пользователя: интерфейс с одним документом (single-document interface, SDI) и интерфейс со многими документами (multiple-document interface, MDI). Текстовый редактор с интерфейсом SDI позволяет открыть только один документ - чтобы открыть другой, следует закрыть предыдущий. В приложении MDI Вы можете открыть сразу несколько документов.
Контейнер для форм
В приложение Visual Basic можно добавить MDI форму, которая будет служить контейнером для подчиненных форм. Подчиненная форма - это обычная форма, у которой значение свойства MDIChild равно True. В режиме выполнения подчиненные окна помещаются внутри родительского окна MDI формы. Меню команд MDI формы может быть общим для всех подчиненных окон, или, если подчиненная форма имеет собственное меню команд, оно замещает меню формы контейнера. При закрытии формы-контейнера закрываются все подчиненные формы.
В приложении MDI можно открыть много окон построенных по одному образцу. При этом в режиме проектирования создается один экземпляр формы. Для того чтобы в режиме выполнения открыть много окон в коде программы создаются новые экземпляры подчиненной формы. Dim NewDoc As New Form1
' Создать новый экземпляр формы
NewDoc.Show
' Показать на экране
Поскольку много подчиненных форм имеют одинаковое имя и одинаковый код, то не следует в коде программы (если код используется несколькими экземплярами формы) использовать имя формы. В модуле формы для ссылок на текущую форму используйте ключевое слово Me.
Unload Me ' Выгрузить текущую форму
На форму MDI можно поместить управляющий элемент, если он имеет свойство Align (Выстроить) или является невидимым в режиме выполнения.
Создадим Текстовый редактор
Простой текстовый редактор имеет интерфейс MDI.
Создайте форму-контейнер командой Add => MDI Form, меню Project.
На форме Form1 создайте текстовое поле Text1 и установите для него свойство Multiline в True, Top и Left в 0.
Свойство MDIChild установите в True.
Создайте процедуру Form_Resize, чтобы размеры текстового окна изменялись при изменении размеров формы:
Text1.Height = Me.ScaleHeight
Text1.Width = Me.ScaleWidth
Создайте меню Файл для формы MDIForm1. В процедуру создания нового документа добавьте код:
Option Explicit
Private Sub mnuNew_Click()
Dim NewDoc As New Form1
' Создать новый экземпляр формы.
Static n As Integer
' Статическая переменная сохраняет значение после завершения работы процедуры
NewDoc.Show
' Показать на экране окно нового документа
интерфейс редактор пользователь
n = n + 1
Увеличиваем значение переменной на 1, при создании еще 1 экземпляра
MDIForm1.ActiveForm.Caption = Left(MDIForm1.ActiveForm.Caption, 4) + CStr(n)
End Sub
Код дочерней формы Form1:
Option Explicit
Private Sub Form_Resize()
Text1.Height = Me.ScaleHeight
Text1.Width = Me.ScaleWidth
' Необходимо использовать ключевое слово Me
' Так как последующий экземпляры класса будут работать не корректно
End Sub
Создайте новый пункт в меню Файл => Окна. Установите свойство WindowList - для отображения списка доступных окон, это свойство доступно лишь для MDI и подчиненных форм.
Меню в приложениях MDI
Обычно используется несколько наборов меню. Когда закрыты все документы, отображается меню MDI формы. Когда пользователь открывает документ, меню команд подчиненной формы замещает меню MDI формы. Панель инструментов располагается всегда в MDI форме.
Таким образом, некоторые команды могут быть в меню формы контейнера, в меню подчиненной формы и на панели инструментов. Чтобы не дублировать код, нужно создать открытую процедуру в подчиненной форме и вызывать ее из процедуры обработки событий.
Форма-контейнер может содержать несколько типов документов.
меню Файл, MDI формы добавим пункт Новый Документ.
Меню команд подчиненной формы также содержит эту команд. Нужно написать процедуру создания нового документа и процедуры обработки для команд меню.
Код MDI формы:
Option Explicit
' Объявляем глобальную переменную для нумерации документов
Public n As Integer
Код подчиненной формы:
Option Explicit
Private Sub Form_Resize()
Text1.Height = Me.ScaleHeight
Text1.Width = Me.ScaleWidth
End Sub
Public Sub NewFile(m As Integer)
Dim NewDoc As New Form1
NewDoc.Show
m = m + 1
MDIForm1.ActiveForm.Caption = Left(MDIForm1.ActiveForm.Caption, 4) + CStr(m)
End Sub
Private Sub mnuNew_Click()
NewFile MDIForm1.n
End Sub
Загрузка и выгрузка форм MDI и подчиненных форм
При загрузке подчиненной формы автоматически загружается и форма MDI. Однако при загрузке формы MDI, подчиненные формы автоматически не загружаются. Это можно увидеть, установив в качестве стартового объекта MDI форму. Можно загрузить подчиненные формы как скрытые, установив значение свойства AutoShowChildren в True и отобразить их в нужный момент методом Show.
Выгрузка формы выполняется по команде Unload в коде программы или при закрытии окна.
При этом выполняются обработки событий QueryUnload и Unload для формы, в которых можно отследить сохранение введенных данных. При выгрузке MDI формы выгружаются и все подчиненные формы. Команда End вызывает немедленное завершение программы, при этом не выполняется процедуры обработки событий.
Проверка были ли сохранены данные
В приложении MDI отслеживается сохранение данных. Если есть не сохранные данные при завершении работы программы или при закрытии одного документа, то данные могут быть сохранены по умолчанию.
Для получения информации о состоянии документа в модуле подчиненной формы введем логическую переменную:
Public fs As Boolean
Переменная fs получает значение True при любых изменениях в текстовом поле.
Private Sub Text1_Change()
fs=True
End Sub
Пусть сохранение документа выполняется в процедуре SaveFile. Переменная fs получает значение False после сохранения документа.
Private Sub SaveFile()
fs=False
End Sub
Если при закрытии документа fs равно True, то функцию MsgBox выводит вопрос и возвращает ответ пользователя. Если ответ был Yes, то выполняется процедура SaveFile.
Private Sub Form_QueryUnload(Cancel As integer, UnloadMode As Integer)
If fs Then
If MsgBox("Сохранить файл?", vbYesNo)=vbYes Then SaveFile
End If
End Sub
Многодокументный интерфейс со вкладками (англ. Tabbed document interface) -- разновидность графического интерфейса пользователя, в котором каждый документ отображается на отдельной вкладке общего окна.
Благодаря компактности и простоте написания, вкладочный интерфейс широко используется в самом разном ПО (браузеры, среды программирования и т. д.), а также в простом самописном ПО.Содержание [убрать]
1 Сравнение с однодокументным интерфейсом
1.1 Преимущества
1.2 Недостатки
2 Сравнение с многодокументным интерфейсом
2.1 Преимущества
2.2 Недостатки
3 Гибриды
3.1 Фреймовый интерфейс
3.2 MDI-окна как вкладки
3.3 Вкладки в MDI-окнах
4 См. также
[править]
Сравнение с однодокументным интерфейсом
[править]
Преимущества
Если в программе есть какие-то общие интерфейсные элементы, относящиеся ко всем документам, интерфейс на вкладках -- логичный шаг.
Логически отделяются окна документов от окон других программ.
Расходуется меньше памяти.
Панели управления разных окон находятся в одном и том же месте.
Логичный шаг, когда все документы -- это части одного «мегадокумента» или «проекта» (как и в MDI).
[править]
Недостатки
Тяжело работать с большим количеством программ одновременно (впрочем, как и в MDI).
Не работают встроенные в ОС функции переключения между программами наподобие 3D Desktop и Exposй.
Невозможно увидеть несколько документов одновременно. Эта задача решается гибридными схемами (см. ниже).
Не получается задействовать много мониторов.
Авария с одним из документов приводит к аварии всей программы (как и в MDI).
[править]
Сравнение с многодокументным интерфейсом
[править]
Преимущества
Лёгкий доступ к различным документам (как и в SDI).
При переключении между несколькими окнами: заголовки окон не отнимают места.
Нет хаоса на рабочем столе, когда открываются несколько документов.
Как следствие -- программисту не нужно писать какие-либо ухищрения для борьбы с этим хаосом, а пользователю -- располагать окна в нужном порядке.
[править]
Недостатки
Не работают встроенные в ОС функции переключения между программами наподобие 3D Desktop и Exposй.
Невозможно увидеть несколько документов одновременно. Эта задача решается гибридными схемами (см. ниже).
Невозможно задействовать много мониторов.
Если документы имеют размеры меньшие, чем экран -- излишний расход места на экране.
[править]
Гибриды
Вкладочный интерфейс -- благодатная почва для различных интерфейсных гибридов. Вот несколько вариантов.
[править]
Фреймовый интерфейс
В Code::Blocks применяется фреймово-вкладочный интерфейс.
Окно программы делится на несколько фреймов. В каждом из них можно держать несколько вкладок с документами. Типичный пример -- Code::Blocks.
Преимущества: малый расход места на экране сочетается с возможностью видеть несколько документов. Недостатки: сложно программируется; упрощённые реализации могут накладывать свои ограничения (например, часть документов располагаются в панели гаджетов и видны постоянно, а остальные -- на вкладках); невозможно расположить документы на разных мониторах или разных «рабочих столах»; некоторые типы панелей (например, миникарта в редакторе уровней) отнимают больше места, чем они реально занимают.
[править]
MDI-окна как вкладки
Гибрид вкладочного и многодокументного интерфейса, в котором пользователь переключается между MDI-окнами с помощью вкладок (как в Opera или IDA Pro).
Подобный подход демонстрирует и Adobe Photoshop CS4. По умолчанию в программе используется вкладочная панель; если вытянуть корешок с панели, вкладка превращается в MDI-окно.
Преимущества: простота программирования; лёгкость переключения и компактность TDI сочетается с гибкостью MDI. Недостатки: формально это MDI с его высоким расходом памяти; панель вкладок отнимает место; зачастую не удаётся задействовать несколько мониторов; не решена проблема группировки документов.
[править]
Вкладки в MDI-окнах
Обратная концепция интерфейса: есть несколько MDI-окон, в каждом из которых есть вкладки. Примеры: традиционный интерфейс Delphi и C++ Builder, панели управления в Adobe Photoshop.
Преимущества: группирует разнотипные документы. Недостатки: универсальный интерфейс сложно программируется, а упрощённые реализации могут накладывать свои ограничения (например, конструктор форм в Delphi -- всегда отдельное окно).
Многодокументный интерфейс
Приложения, которые обеспечивают работу со многими документами в центральной области главного окна, называются приложениями с многодокументным интерфейсом или MDI-приложениями. В Qt MDI-приложения создаются с использованием в качестве центрального виджета класса QWorkspace и путем представления каждого документа в виде дочернего окна QWorkspace.
Обычно MDI-приложения содержат пункт главного меню Windows (окна) с командами по управлению окнами и их списком. Активное окно отмечается галочкой. Пользователь может сделать любое окно активным, щелкая по его названию в меню Windows.
В данном разделе для демонстрации способов создания приложения с интерфейсом MDI и способов реализации его меню Windows мы разработаем MDI-приложе-ние Editor (редактор), Это приложение состоит из двух классов: MainWindow и Editor. Его программный код находится на компакт-диске, и поскольку большая часть его либо совпадает, либо очень похожа на программный код приложения Электронная таблица из части I, здесь мы представим только новый программный код.
Давайте начнем с класса MainWindow.
MainWindow::MainWindow()
{
workspace = new QWorkspace; setCentralWidget(workspace);
connect(workspace, SIGNAL(windowActivated(QWidget *)), this, SLOT(updateMenusO));
createActions(); createMenusO; createToolBarsO; createStatusBar();
setWindowTitle(tr("MDI Editor")); setWindowIcon(QPixmap(":/images/icon.png"));
}
В конструкторе MainWindow мы создаем виджет QWorkspace и делаем его центральным виджетом. Мы связываем сигнал windowActivated() класса QWorkspace со слотом, который мы будем использовать для обеспечения актуального состояния меню Window.
void MainWindow::newFile() {
Editor *editor = createEditor();
editor->newFile();
editor->show();
Слот newFile() соответствует пункту меню File|New. Он зависит от зарытой функции createEditor(), создающей дочерний виджет Editor.
Editor *MainWindow:: createEditiorO
Editor *editor =.new Editor;
connect(editor, SIGNAL(copyAvailable(bool)),
cutAction, SLOT(setEnabled(bool))); connect(editor, SIGNAL(copyAvailable(bool)),
copyAction, SLOT(setEnabled(bool)));
Размещено на Allbest.ru
Подобные документы
Структура окна офисного приложения MS Word, ввод текста, копирование и перемещение его фрагментов. Работа со встроенными шрифтами, сохранение, закрытие и открытие документов. Создание нового документа, установка параметров страницы, форматирование текста.
лабораторная работа [33,7 K], добавлен 26.01.2010Текстовый редактор как средство создания, обработки и хранения документов равной степени сложности. Интерфейс текстового редактора MS Word, редактирование и форматирование текста. Работа с таблицами, рисунками и диаграммами. Распечатывание документа.
дипломная работа [283,4 K], добавлен 03.05.2009Применение текстового редактора Microsoft Word для обработки текстовой информации на компьютере. Создание документа, его редактирование и форматирование. Инструмент редактирования текста. Границы и заливка, выделение фрагментов. Стиль написания документа.
реферат [1,4 M], добавлен 28.12.2010Алгоритм добавления нового элемента в дерево и поиска по нему. Порядок разработки руководства пользователя. Принцип работы с экранным меню. Методика и этапы добавления нового элемента. Формирование и содержание инструкции системного программиста.
курсовая работа [411,8 K], добавлен 06.06.2014Технология разработки пользовательского интерфейса в среде Delphi. Создание таблицы, меню, форм для ввода и редактирования данных. Принципы организации меню как элемента интерфейса пользователя. Реализация сортировки, фильтрации, вычислений в таблице.
курсовая работа [1,6 M], добавлен 13.11.2012Создание нового документа. Редактирование текстовых файлов типа TXT и RTF. Сохранение измененного документа. Изменение шрифта, начертания и размера символов. Отмена последнего действия. Оформление нового текста, форматирование абзаца, удаление текста.
реферат [158,6 K], добавлен 25.10.2013Разработка программы вычисления выражения y = (x+10)5. Ход работы, структурная схема алгоритма. Окна основных обозревателей системы, текстовый редактор. Интерфейс модели ЭВМ, методы ввода и отладки программы, действия основных классов команд, адресация.
лабораторная работа [523,4 K], добавлен 28.12.2014Совокупность программных и аппаратных средств, обеспечивающих взаимодействие пользователя с компьютером. Классификация интерфейсов, текстовый режим работы видеоадаптера. Функции текстового режима. Реализация пользовательского интерфейса в BORLAND C++.
лабораторная работа [405,1 K], добавлен 06.07.2009Настройка текстового редактора MS Word. Создание текстового документа. Создание шаблона. Форматирование сложного документа. Создание списков и колонок текста. Создание таблиц. Создание формул. Связывание и внедрение объектов. Создание макросов.
контрольная работа [36,6 K], добавлен 10.05.2004Создание инструмента проектирования и прототипирования графических пользовательских интерфейсов сложных информационных систем. Интерфейс пользователя и командной строки. Средства прототипирования и их характеристики. Создание интерактивных прототипов.
дипломная работа [2,4 M], добавлен 04.07.2011