Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 700269.doc
Скачиваний:
15
Добавлен:
01.05.2022
Размер:
1.78 Mб
Скачать

5.3. Типы пользовательского интерфейса

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

  1. Консольные приложения;

  2. Одно-документный интерфейс (SDI-приложение).

  3. Многодокументный интерфейс (MDI-приложение).

  4. Форма со вкладками.

Консольные приложения, т.е. программы, работающие в текстовом режиме и не имеющие собственного окна. Например, программы, написанные для MS DOC, как правило, работают в консольном режиме. Приведем пример простого приложения, которое выводит в консольном окне текст.

program ConsoleProg;

{$APPTYPE CONSOLE} // директива компилятора,

// определяющая приложение как консольное

{$R *.RES}

begin

WriteLn ('Выводимый текст');

end;

5.3.1. SDI-интерфейс

Термин SDI (Single Document Interface) дословно означает одно-документный интерфейс. SDI-приложения способны загрузить и использовать одновременно только один документ. Ярким представителем такого класса программ является стандартное ПО просмотра текстовых файлов в Windows – программа "Блокнот".

Следует сказать несколько слов о термине документ. За время развития многозадачных операционных систем приложения, функционирующие в них, становятся все более объекто-центричными, т.е. они работают с неким центральным объектом (документом), в который могут быть внедрены другие внешние объекты, причем в общем случае внешние объекты могут создаваться и редактироваться отдельным специализированным ПО. Но исходная программа остается при этом SDI-приложением, так как может работать только с одним объектом (или документом в широком смысле этого слова).

Способность одновременно работать только с одним объектом не мешает приложению использовать дополнительные формы, например диалоговые окна, панели инструментов и прочее. Примером может служить сама Delphi – огромное количество панелей инструментов, меню, разнообразных библиотек компонентов, взаимодействующих между собой форм... Но в целом она остается SDI-приложением, так как может загрузить и использовать одновременно только один объект.

5.3.2. MDI-интерфейс

Термин MDI (Multiple Document Interface) дословно означает многодокументный интерфейс и описывает приложения, способные загрузить и использовать одновременно несколько документов или объектов.

Обычно MDI-приложения состоят минимум из двух форм – родительской и дочерней. Свойство родительской формы FormStyle устанавливается равным fsMDIForm. Для дочерней формы устанавливается стиль fsMDIChild. Родительская форма служит контейнером, содержащим дочерние формы, которые могут перемещаться, изменять размеры, минимизироваться или максимизироваться только в клиентской области родительской формы. В приложении могут быть дочерние формы разных типов, например одна – для обработки изображений, а другая – для работы с текстом.

В MDI-приложении, как правило, требуется выводить несколько экземпляров объектов одного класса, каждый из которых должен быть создан перед использованием, т.е. под объект должна быть выделена память, и уничтожен (память должна быть освобождена), когда программа в объекте больше не нуждается.

В случае форм в Delphi это можно сделать автоматически с помощью вкладки Forms в опциях настройки проекта (меню Project, команда Options ( , Shift+Ctrl+F11)). При этом автоматически создаваемые формы (Auto-create forms) автоматически будут уничтожаться и освобождать память.

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

Form1:= TForm1.Create(Application);

Конструктор Create получает в качестве параметра потомка класса TComponent (базовый класс всех компонентов Delphi), который и будет владельцем формы. Можно передать параметр nil, создав форму без владельца, но тогда придется освобождать занимаемую память вручную с помощью программного кода Form1.Free. В примере (как обычно и делается), в качестве владельца выступает глобальный объект разрабатываемого приложения Application. Дело в том, что процесс удаления форм подчиняется концепции владельцев объектов: когда объект уничтожается, автоматически уничтожаются все объекты, которыми он владеет. Созданная описанным образом форма принадлежит объекту Application и уничтожается при закрытии приложения.

Класс TForm имеет несколько свойств, специфичных для MDI-приложений.

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

Свойство MDIChildren является массивом объектов, предоставляющих доступ к созданным дочерним формам. MDIChildCount возвращает количество элементов в этом массиве. Обычно эти свойства используется при выполнении какого-либо действия над всеми открытыми дочерними формами. Вот, например, код миминизации всех дочерних форм.

for i:= MDIChildCount-1 downto 0 do

MDIChildren[i].WindowState := wsMinimized;

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

Профессиональные MDI-приложения позволяют активизировать необходимое дочернее окно, выбрав его из списка в меню. Свойство WindowMenu определяет объект TMenuItem, который Delphi будет использовать для вывода списка доступных дочерних форм.

Из специфических MDI-событий класса TForm отметим, что событие OnActivate (отобразить, показать форму) родительской формы имеет место при переключении между дочерними формами.

Имеются также специфичные для MDI-форм методы. Arrangelcons выстраивает пиктограммы минимизированных дочерних форм в нижней части родительской формы. Cascade располагает дочерние формы каскадом, так что видны все их заголовки. Next и Previous вызывает переход от одной дочерней формы к другой. Tile выстраивает дочерние формы так, что они не перекрываются.