Объектно-ассистированный режим Visual FoxPro 9 усиливает возможности Microsoft Windows GDI+ по интерпретации выводных устройств. GDI+ предлагает новые возможности для высококачественного гибкого вывода, а также объявляет некоторые изменения во внутреннем поведении устройств вывода. Этот раздел описывает некоторые аспекты создания выводов, связанных с использованием GDI+.

GDI+ средства в Visual FoxPro объектно-ассистированном выводе

Когда вы используете Visual FoxPro объектно-ассистированный режим отчета, вывод интерпретируется объектом, порожденным от ReportListener. Следующая таблица перечисляет пути, по которым GDI+ влияет на средства  ReportListener и внутреннее поведение.

Интерпретация(rendering) не зависимая от устройства (Device-independent) и не зависимая от резолюции (resolution-independent)

GDI+ обеспечивает графический объект, высокий уровень абстракции содержимого устройства (an extra layer of abstraction beyond the device context of GDI). Графический объект способен интерпретировать вывод идентичный таким устройствам, как экран и принтер.

Вы можете ожидать высокий уровень соответствия между предварительным просмотром и выводом на печать в объектно-ассистированном режиме отчета Visual FoxPro. Методы графического объекта для уровня вывода текста и графики являются resolution-independent, поэтому Visual FoxPro может интерпретировать страницы страницы для принтеров как различные резолюции, соответствующие возможностям каждого принтера.

NoteЗамечание

Так как Visual FoxPro признает наличие резолюции печати для каждого принтера, Вы можете увидеть некоторые изменения в поведении отчетов для сохраненного окружения принтеров. Если setup принтера, который был сохранен во время разработки отчета имел другую резолюцию, чем принтер, который вы описали при прогоне отчета, страница может иметь неправильный масштаб. В Visual FoxPro 9 Вы можете заменить инструкции setup принтера явными инструкциями в отдельном поле, включающем явные инструкции для использования специфических резолюций принтера, независимых от принтера  (подразумевается поддержка резолюций принтера, установленных Dами). Однако, в большинстве случаев, Вам нет необходимости делать это. Просто удалите окружение принтера из отчета, это обеспечит лучший результат.

NoteПодсказка

В Visual FoxPro 9, в отличии от предыдущей версии, окружение принтера не сохраняется по умолчанию в таблице определения отчета и этикетки. Для дополнительной информации об использовании перезаписи установки окружения принтера смотри  Понимание и расширение структуры отчета. Для дополнительной информации об окружении принтера в отчетах смотри Как сохранить окружение принтера в отчете.

Различия в кернинге и ширине текста при выводе в предыдущих версиях

Независимые методы GDI+  'устройства- и резолюции-' рисования текста гарантирует, что определенная строка будет заполнена в тот же прямоугольник в раскладке, когда она интерпретируется для другого устройства. Однако, алгоритмы в GDI+, которые измеряют строки, управляют кернингом (или местом расположения) индивидуальных символов в строках и располагают строки в прямоугольники раскладки, отличны от оригинальных алгоритмов движка отчетов (Report Engine),  используемых для этой цели.

Если вы определили ширину для выражения очень явно в существующем отчете, в некоторых случаях одни и те же данные не будут заполнены. У Вас будет возможность расширить выражение добавлением нескольких пикселей. Вы можете использовать опции раскладки размера и положения Report Builder удобные для этой цели. Для дополнительной информации смоти General Tab, Report Control Properties Dialog Box (Report Builder).

NoteПодсказка

Как и в предыдущих версиях Visual FoxPro, числовые выражения, которые не помещатся в их назначенные раскладкой прямоугольникиo, отображаются звездочками в выводе отчета для предотвращения отображения чисел, которые выглядят, как правильные, но на самом деле обрезаны.  Если Вы видите звездочки в выражении, когда вы переключаете отчет на объектно-ассистированный режим и если Вы считаете, что число должно быть заполнено в это место, проверьте назначен ли шаблон отображения (picture template) для него. Все версии Visual FoxPro используют picture template для определения сколько места необходимо числу для отображения. Если вы использовали шаблон такой, как 99,999.99, например, Ваш вывод может отображать звездочки даже, если настоящее число будет иметь только несколько цифр. Для гарантии правильного отображения вывода в object-assisted режиме, Вы можете расширить раскладку элемента достаточную для отображения 99,999.99 с атрибутом назначенного фонта для элемента. Однако, если picture template имеет больше цифр, чем Вы предвидели в результате, Вам может понадобиться удалить цифру из шаблона. Для дополнительной информации смотри Выражение формата для полей управленияr (Field Controls).

Когда строка не помещается в назначенный прямоугольник раскладки GDI+ дает пользователю знать, что требуемый вывод не отображается. Класс ReportListener улучшает эту возможность GDI+ для вывода неотображаемых чисел с помощью своих опций StringTrimming , описанных далее.

NoteЗамечание

Все версии Visual FoxPro's Report System игнорируют прямоугольник раскладки когда отображают вычисляемые поля, у которых есть picture templates. Как результат, различия между object-assisted выводом и обратносовместимым выводом, описанным здесь не используется для вычисляемых полей. Например, поле, установленное как Sum и имеющее picture template  999,999,999 в прямоугольнике раскладки, который очень мал, заполнит все знаки в  template и будет отображать свой полный текст; оно не будет усечено. Для дополнительной информации смотриКак выполнять вычисления в поле управления ( Field Controls) and Выражение формата для полей управленияr (Field Controls).

Опция StringTrimming

GDI+ обеспечивает множество путей управления текстом, который не может быть заполнен в свой назначенный прямоугольник раскладки. Класс ReportListener раскрывает свои различные опции, как показано в таблице ниже. Когда Вы разрабатываете отчет или этикетку Report Builder позволяет вам выбирать из своих опций в диалоговом боксе Report Control Properties. Для дополнительной информации о выборе одной из доступных опций при разработке отчета смотри Format Tab, Report Control Properties Dialog Box (Report Builder).

Значение Тип StringTrimming

0

Не определен, используется по умолчанию.

1

StringTrimmingCharacter

Обрезает строку, которая не помещается, до ближайшего знака.

2

StringTrimmingWord

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

3

StringTrimmingEllipsisCharacter

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

4

StringTrimmingEllipsisWord (Visual FoxPro default)

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

NoteЗамечания

Обрезание строки, базирующееся на слове, так и на знаке, наиболее близко эмулирует поведение обрезания Visual FoxPro при прогоне отчета не в режиме object-assisted. Добавление () позволяет пользователям видеть, когда некоторое содержание отсутствует. Так как GDI+ требует немного больше места для текстовых выражений, чем GDI требовал, эта установка поможет Вам проверить старые отчеты для выражений, которые требуют увеличения ширины для GDI+ при управлении своими контекстами.

5

StringTrimmingEllipsisPath

Замещение внутренней части строки, которая не помещается, знаками ().

NoteЗамечание

Это значение полезно для имен файла и пути. Например, the string C:\PROGRAM FILES\MICROSOFT VISUAL FOXPRO 9\REPORTOUTPUT.APP может отображаться, как C:\PROGRAM FILES\\REPORTOUTPUT.APP.

Свойство DynamicLineHeight

GDI+ line spacing является методом по умолчанию для  управления размещением строк в объекте ReportListener, который интерпретирует многострочный текст. GDI+ line spacing позволяет делать отчеты более совершенного вида, быстрее выполнять их, чем оригинальные алгоритмы Report Engine и создавать несколько страниц для одного содержимого отчета. Однако, GDI+ line spacing увеличивает необходимое для текста место в раскладке. Это можно увидеть при  сравнении результатов вывода с предыдущими версиями  Visual FoxPro.

Стратегия интерпретации объекта ReportListener для текста, занимающего несколько строк, изменяетяс в соответствии со значением его свойства DynamicLineHeight . Эта величина определяет использует ли  ReportListener  GDI+ стандартный (динамический) line spacing в соответствии с характеристиками фонта или обратносовместимый фиксированный line spacing, используемый Visual FoxPro при прогоне отчетов и этикеток, но не в режиме object-assisted. Для дополнительной информации смотри Свойство DynamicLineHeight.

Возможности вывода страничных образоа (output page images)

Когда приложение с помощью GDI+ создает определенный  рисунок (drawing surface), GDI+ обеспечивает методы для сохранения содержимого этого рисунка в различных типах графических файлов. Visual FoxPro расшитяет эти возможности в OutputPage  методе объекта ReportListener. Для дополнительной информации смотри Метод OutputPage.

Возможность установки величины прозрачности в цвете

GDI+ описывает цвета используя ARGB (alpha или прозрачный, красный, зеленый и голубой) компоненты. Файлы определения отчетов и этикеток Visual FoxPro не имеют возможности хранить значение прозрачности, поэтому цвета в  таблицах .frx и .lbx хранятся как полностью прозрачные или непрозрачные. Однако, Visual FoxPro в run time с помощью кода объекта ReportListener в событии EvaluateContents расширяет значения прозрачности. Вы можете использовать это событие динамически устанавливая цвет текста и подложки на различные уровни прозрачности. Для дополнительной информации смотри Событие EvaluateContents.

Использование GDI+ в коде пользователя во время прогона

Ваш код может улучшить возможности GDI+ в отчетах. Visual FoxPro 9 поставляется с подходящими интерфейсными классами для GDI+ API, позволяющими Вам использовать эти возможности. Для дополнительной информации смотри GDI Plus API Wrapper Foundation Classes.

Ваше использование GDI+ в течение прогона отчета имеет одну из двух форм:

  • Вы используете GDI+ для интерпретации рисунка с использованием объекта ReportListener для родного вывода (native output). В этом сценарии Вы можете динамически разместить новые элементы вывода или  изменить существующие прямо при прогоне отчета. Класс ReportListener расширяет возможности по управлению своими собственными графическими объектами при прогоне отчета для этой цели. Для дополнительной информации смотри  Свойство GDIPlusGraphics. Как объяснено в этом разделе и как показано в примере кода, для использования родного графического объекта ReportListener, Вам необходимо использовать функции, базирующиеся на той же копии файла GDIPLUS.DLL которую продукт использует в родном коде. Для того, чтобы быть уверенным, что вы используете правильную копию GDIPLUS.DLL, используйте синтаксис IN GDIPLUS.DLL с не явным путем в вашем выражении DECLARE DLL. Для дополнительной информации смотри  DECLARE - DLL Command.

  • Вы используете объект ReportListener с handle для отделения графического объекта и запрашиваете его для прорисовки выводной страницы в этот дополнительный графический объект. В этом сценарии Вы не добиваетесь своей цели временным назначением другого  handle для свойства GDIPlusGraphics объекта ReportListener. Для целей безопасности этот handle является read-only. Вместо этого, Вы используете ReportListener с дополнительным handle, как один из параметров для метода OutputPage. ReportListener's GDIPlusGraphics handle и родной поток вывода (native output stream) остаются незатронутыми этим процессом. Для дополнительной информации смотри Метод OutputPage.

Смотри также