Описание графического интерфейса пользователя.

Главное окно редактора макетов представлено на рисунке 1.

Pict 1

Рис. 1 Главное окно редактора макетов

Основную часть окна занимает поле редактирования, на котором можно видеть редактируемый макет с разбиением на страницы. Ниже приведено описание команд главного меню.

Pict 2

Рис. 2 Меню файл

Новый - создать новый пустой макет

Открыть - открыть существующий макет для редактирования

Сохранить - сохранить макет с выполненными изменениями

Сохранить как - сохранить текущий макет под другим именем

Параметры страницы - изменить параметры постраничного вывода макета на печать (размер бумаги, поля и перехлесты)

Выход – завершить работу с редактором

Pict 3

Рис. 3 Меню правка

Добавить объект – добавить в макет объект из файла

Рамочка – добавить в макет новую рамочку

Удалить выделение – удалить из макета выделенную группу объектов

Выделить все – выделить все объекты макета

Заблокировать – заблокировать все объекты макета. При этом становиться невозможным их перемещение и удаление

На передний план – переместить выделенную группу объектов на передний план

На задний план - переместить выделенную группу объектов на задний план

Свойства – редактировать свойства выделенных объектов

Pict 4

Рис. 4 Меню вид

Обновить – перераспределить объекты в макете и обновить изображение на экране

Выравнивание – отобразить панель с командами выравнивания объектов

Подобрать масштаб – подобрать масштаб таким образом, чтобы редактируемый макет виден целиком и размещался по центру поля редактирования

Увеличить – приблизить изображение макета

Уменьшить – отдалить изображение макета

Pict 5

Рис. 5 Меню сервис

Справка – показать руководство пользователя

О программе – показать информацию о редакторе макетов

Настройки – изменить настройки редактора макетов

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

Команды на панели инструментов дублируют соответствующие команды главного меню.

Концепция макета документа

Макет представляет собой набор объектов, которые обладают специфичными свойствами и имеют определенное положение друг относительно друга. Каждый объект может иметь определенную привязку относительно одного из прочих объектов.

Для макета задается размер и параметры страницы, на которых он будет выведен на печать, при этом макет разбивается на страницы автоматически. Нумерация страниц начинается с 1 и выполняется построчно (слева направо и сверху вниз).

Координаты отсчитываются от левого верхнего угла документа (первой страницы) и указываются в миллиметрах.

Параметры страницы документа

Изменение параметров страницы, на которые будет выводиться документ осуществляется в диалоге «Параметры страницы» (меню Файл|Параметры страниы)

Pict 6

Рис. 6 Диалог «Параметры страницы»

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

Pict 7

Рис. 7 Разметка страницы

На рисунке 7 можно увидеть пример разметки страницы. Обратите внимание, что перехлесты располагаются только на стыке соседних страниц (то есть если граница страницы является также границей документа, то перехлест отсутствует). Все перехлесты (снизу, сверху, справа и слева) имеют одинаковое значение и задаются в диалоге настроек параметров страницы.

Обратите внимание: изображение в области перехлеста дублирует изображение информационной области соседней страницы. Так, на рисунке 7 в область перехлеста левой страницы попал нос и правый глаз человечка, которые являются частью информационной области правой страницы (аналогично и для перехлеста правой страницы).

Редактирование макета документа

В данном разделе описаны основные приемы редактирования макета документа, а также предназначенные для этого интерфейсы пользователя и диалоги.

Добавление нового объекта

Для добавления нового объекта необходимо выполнить следующие действия:

  1. Выбрать команду меню Правка|Добавить объект.
  2. В появившемся диалоговом окне выбрать тип вставляемого объекта посредством изменения типа отображаемых файлов.
  3. Выбрать файл, который вы хотите вставить в документ и нажать кнопку ОК.

В результате выполненных действий в макет будет добавлен новый объект. Положение и свойства добавленных объектов выставляются по умолчанию и в дальнейшем могут быть изменены.

Добавление рамочки

Для добавления рамочки необходимо выбрать пункт меню Правка|Рамочка (либо соответствующую команду на панели инструментов). После этого в документ будет сразу добавлена новая рамка.

Положение и размер объекта

Чтобы выполнить любые действия по редактированию существующего объекта, его необходимо сначала выделить, для чего следует выполнить одиночный клик левой кнопкой мыши в пределах внутреннего пространства объекта. Добавить объект к группе уже выделенных (или исключить из нее) можно проделав действия по выделению необходимого объекта с зажатой клавишей Ctrl. Признаком того, что объект выделен, могут служить размерные маркеры по краям примитива.

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

Для перемещения выполните следующие действия:

  1. Выделите один или несколько объектов.
  2. Выполните одиночный клик левой кнопкой мыши в пределах внутреннего
    пространства одного из выделенных объектов (указанием того, что вы можете это сделать, будет изменение курсора на прямо пересекающиеся стрелки).
  3. Начните перемещать курсор мыши. Выделенные объекты начнут
    перемещаться вслед за ним.
  4. Для завершения перемещения выполните одиночный клик левой кнопкой
    мыши в любом месте поля редактирования.

Обратите внимание: при перемещении мыши с зажатой левой кнопкой, вслед за ней будет перемещаться и весь документ (поле редактирования).

Обратите внимание: некоторые объекты могут иметь постоянную привязку относительно других объектов. При этом после завершения перемещения они автоматически переместятся согласно указанной для них привязки.

Свойства объекта

Каждый объект документа обладает рядом свойств, которые можно просмотреть и изменить в диалоге «Свойства объекта». Для редактирования свойств объекта необходимо:

  1. Выделить один или несколько объектов.
  2. Выбрать команду меню Правка|Свойства.
  3. В появившемся диалоговом окне установить необходимые значения свойств и подтвердить изменения нажатием кнопки ОК.

Pict 8

Рис. 8 Вкладка «границы и заливка» диалога «Свойства объекта»

При использовании заливки, фон в пределах объекта будет заполнятся выбранным цветом с выбранной прозрачностью, а основная информация объекта будет выводиться поверх этого фона. Прозрачность задается в процентах: 100% - непрозрачный фон, 0% - полностью прозрачный фон.

Обратите внимание: использование прозрачности (если величина процента прозрачности отлична от 100) может привести к ощутимому замедлению работы программы на некоторых ПК.

При использовании границ, внутреннее пространство объекта будет отчерчиваться линией с выбранными параметрами.

Обратите внимание: толщина линии задается в миллиметрах, однако если значение толщины установлено равной 0, линия будет проведена с наименьшей возможной толщиной, на которое способно устройство вывода.

Pict 9

Рис. 9 Вкладка «размер» диалога «Свойства объекта»

Размер объекта можно задать как в миллиметрах, так и в процентах от исходного размера. Обратите внимание, что при установленной флажке «сохранить пропорции», изменение размера объекта в одном измерении приведет к пропорциональному изменению размера в другом измерении.

Pict 10

Рис. 10 Вкладка «привязка» диалога «Свойства объекта»

Любой объект макета можно привязать к другому объекту. При этом привязанный объект будет всегда сохранять свое расположение относительно родителя (в соответствии с выбранным способом привязки).

Выбор родителя, к которому будет привязан объект осуществляется из выпадающего списка «Привязать к», в котором перечислены имена всех возможных родителей для данного объекта. Выбранный в настоящий момент родитель подсвечивается салатовым цветом.

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

Привязка осуществляется по горизонтали и вертикали раздельно.

Pict 11

Рис. 11 Вкладка «дополнительно» диалога «Свойства объекта»

Каждый объект обладает именем, изменить которое можно на вкладке «дополнительно» (рисунок 11). Каждому объекту также может быть присвоено описание.

Объектам могут быть назначены внешние свойства и внешний редактор. Доступ к ним можно получить с помощью кнопок «дополнительно» и «редактировать» соответственно.

Настройки редактора

Настройки программы доступны в диалоге «настройки программы» по команде меню Сервис|Настройки.

Руководство разработчика

Для гибкости редактора макетов предусмотрена возможность его расширения посредством плагинов. Каждый плагин отвечает за отдельный тип объектов: его создание, загрузку, отображение и выгрузку.

Плагин базируется на двух интерфейсах: объект макета и фабрика класса для этого объекта. Описание этих интерфейсов приведено в файле PreviewIntf.pas. Каждый из них будет более подробно разобран ниже.

Объект макета

IPreviewObject= interface(IInterface)

['{CD7837A0-02E7-46E2-805A-6B28D91F8D78}']

function GetClassFactory: TGUID;

function GetExpectedDimensionsMm(var aWidthMM, aHeightMM: cardinal): boolean;

function CanEditData: boolean;

function DoEditData: boolean;

function CanEditProps: boolean;

function DoEditProps: boolean;

procedure SaveToStream(aStream: TStream);

function LoadFromStream(aStream: TStream): boolean;

procedure SaveToFile(aFileName: string);

function LoadFromFile(aFileName: string): boolean;

procedure DrawTo(aDC: HDC; const pxRect: TRect; mmWidth, mmHeight: cardinal; aSimply: boolean);

function GetDescription: string;

function GetDefaultName: string;

end;

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

function GetClassFactory: TGUID;

Возвращает идентификатор фабрики, которая умеет создавать объекты данного типа. Описание фабрики смотри ниже.

function GetExpectedDimensionsMm(var aWidthMM, aHeightMM: cardinal): boolean;

Возвращает истину, ложь, если объекту все равно, какие размеры он примет по умолчанию. И истину в противном случае. Размеры передаются посредством параметров в миллиметрах.

function CanEditData: boolean;

Возвращает истину, если объект имеет свой редактор данных и ложь в противном случае.

functionn DoEditData: boolean;

Выполняет редактирование данных объекта. Возвращает истину, если данные были изменены и их необходимо сохранить; в противном случае – ложь.

function CanEditProps: boolean;

Возвращает истину, если объект имеет свой редактор свойств и ложь в противном случае.

function DoEditProps: boolean;

Выполняет редактирование собственных свойств объекта. Возвращает истину, если данные были изменены и их необходимо сохранить; в противном случае – ложь.

procedure SaveToStream(aStream: TStream);

Сохраняет данные объекта, собственные свойства (и прочую внутреннюю информацию) в поток.

function LoadFromStream(aStream: TStream): boolean;

Загружает данные объекта, собственные свойства (и прочую внутреннюю информацию) из потока.

procedure SaveToFile(aFileName: string);

Сохранить данные объекта во внешний файл. Данная функция используется для экспорта данных, поэтому внутренние свойства и другую внутреннюю информацию сохранять не следует.

function LoadFromFile(aFileName: string): boolean;

Загрузить данные объекта из внешнего файла. Данная функция используется для импорта информации, поэтому внутренние свойства и прочую информацию следует установить в значения по умолчанию.

procedure DrawTo(aDC: HDC; const pxRect: TRect; mmWidth, mmHeight: cardinal; aSimply: boolean);

Вывести данные объекта на контекст устройства. При этом указывается прямоугольник вывода данных объектов (pxRect) и реальные размеры объекта в миллиметрах (mmWidth, mmHeight). Параметр aSimply принимает значение истины, когда допустимо упрощенное отображение данных для ускорения вывода (например, при выводе на экран). Последний параметр допустимо игнорировать.

function GetDescription: string;

Возвращает текстовое описание объекта. К примеру, если объект отвечает за вывод растра, возможным описанием будет «цветной точечный рисунок».

function GetDefaultName: string;

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

Фабрика класса

IPreviewClassFactory= interface(IInterface)

['{A2F05697-C7FE-450D-A618-E838515B8004}']

function GetNewObject: IPreviewObject;

function GetFileFilter: string;

function GetFileDescription: string;

end;

Данный интерфейс предназначен для управления созданием объектов макета, а также для привязки к ним различных типов внешних файлов.

function GetNewObject: IPreviewObject;

Создает и возвращает новый экземпляр объекта макета. Ответственность за его удаление лежит в дальнейшем на внешнем модуле (в дальнейшей судьбе объекта фабрика участия не принимает).

function GetFileFilter: string;

Возвращает расширение файлов (в формате *.расширение), которые связаны с объектами, создаваемыми данной фабрикой. Эти объекты должны уметь загружать и отображать данные файлов с указанным расширением.

function GetFileDescription: string;

Возвращает текстовое описание файлов, которые связаны с объектами, создаваемыми данной фабрикой.

Регистрация плагина

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

  • Описать объект, поддерживающий интерфейс IPreviewObject, способный отображать, сохранять и загружать сопоставленные ему данные.
  • Описать объект, поддерживающий интерфейс IPreviewClassFactory, способный создавать объекты из предыдущего шага.
  • Создать один экземпляр фабрики класса и зарегистрировать его в редакторе макетов с помощью метода RegisterPlugin объекта-одиночки PreviewApplication (PreviewApp.pas). Созданный на этом этапе объект удалять не следует – именно он будет создавать необходимые объекты (и будет удален автоматически внешним модулем).