Положение и размер объекта
⇐ ПредыдущаяСтр 2 из 2 Чтобы выполнить любые действия по редактированию существующего объекта, его необходимо сначала выделить, для чего следует выполнить одиночный клик левой кнопкой мыши в пределах внутреннего пространства объекта. Добавить объект к группе уже выделенных (или исключить из нее) можно проделав действия по выделению необходимого объекта с зажатой клавишей Ctrl. Признаком того, что объект выделен, могут служить размерные маркеры по краям примитива. Обратите внимание: объекты упорядочены по глубине, то есть одни объекты могут полностью или частично перекрывать другие. В этом случае выделение объекта на заднем плане может быть затруднено. Для разрешения этой ситуации воспользуйтесь командой (На передний план, На задний план). Выделенные объекты временно перемещаются на передний план и в выделенном состоянии отображаются поверх всех остальных. Для перемещения выполните следующие действия: 1. Выделите один или несколько объектов. 2. Выполните одиночный клик левой кнопкой мыши в пределах внутреннего пространства одного из выделенных объектов (указанием того, что вы можете это сделать, будет изменение курсора на прямо пересекающиеся стрелки). 3. Начните перемещать курсор мыши. Выделенные объекты начнут перемещаться вслед за ним. 4. Для завершения перемещения выполните одиночный клик левой кнопкой мыши в любом месте поля редактирования. Обратите внимание: при перемещении мыши с зажатой левой кнопкой, вслед за ней будет перемещаться и весь документ (поле редактирования). Обратите внимание: некоторые объекты могут иметь постоянную привязку относительно других объектов. При этом после завершения перемещения они автоматически переместятся согласно указанной для них привязки.
Свойства объекта Каждый объект документа обладает рядом свойств, которые можно просмотреть и изменить в диалоге «Свойства объекта». Для редактирования свойств объекта необходимо: 1. Выделить один или несколько объектов. 2. Выбрать команду меню Правка|Свойства. 3. В появившемся диалоговом окне установить необходимые значения свойств и подтвердить изменения нажатием кнопки ОК.
Рис. 8 Вкладка «границы и заливка» диалога «Свойства объекта» При использовании заливки, фон в пределах объекта будет заполнятся выбранным цветом с выбранной прозрачностью, а основная информация объекта будет выводиться поверх этого фона. Прозрачность задается в процентах: 100% - непрозрачный фон, 0% - полностью прозрачный фон. Обратите внимание: использование прозрачности (если величина процента прозрачности отлична от 100) может привести к ощутимому замедлению работы программы на некоторых ПК. При использовании границ, внутреннее пространство объекта будет отчерчиваться линией с выбранными параметрами. Обратите внимание: толщина линии задается в миллиметрах, однако если значение толщины установлено равной 0, линия будет проведена с наименьшей возможной толщиной, на которое способно устройство вывода.
Рис. 9 Вкладка «размер» диалога «Свойства объекта» Размер объекта можно задать как в миллиметрах, так и в процентах от исходного размера. Обратите внимание, что при установленной флажке «сохранить пропорции», изменение размера объекта в одном измерении приведет к пропорциональному изменению размера в другом измерении.
Рис. 10 Вкладка «привязка» диалога «Свойства объекта» Любой объект макета можно привязать к другому объекту. При этом привязанный объект будет всегда сохранять свое расположение относительно родителя (в соответствии с выбранным способом привязки).
Выбор родителя, к которому будет привязан объект осуществляется из выпадающего списка «Привязать к», в котором перечислены имена всех возможных родителей для данного объекта. Выбранный в настоящий момент родитель подсвечивается салатовым цветом. Обратите внимание: объект нельзя привязать к другому объекту, если последний напрямую либо через другие объекты привязан к редактируемому (в этом случае подобные объекты не отображаются в списке возможных родителей). Привязка осуществляется по горизонтали и вертикали раздельно.
Рис. 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). Созданный на этом этапе объект удалять не следует – именно он будет создавать необходимые объекты (и будет удален автоматически внешним модулем).
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|