Чтобы представить вам SET REPORTBEHAVIOR 90 настройки, Visual FoxPro поставляется со штатным контейнером просмотра ReportPreview.App. Он находиться в папке HOME(), на ряду с другими инструментами, и ссылка по умолчанию на него находится в системной переменной _REPORTPREVIEW.

Данная статья описывает потенциальные возможности Контейнера Просмотра, предоставленные приложением ReportPreview.App, в дополнение к стандартному API Контейнеру Просмотра.

Предварительно ознакомьтесь

Диаграмма Объекта

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

Visual FoxPro Preview Object Diagram graphic

Используется объект-посредник для того, чтобы обеспечить выполнение многочисленных команд REPORT FORM… PREVIEW в режиме под управлением объекта, данный контейнер просмотра может устанавливать один из числа определенных подклассов класса frxPreviewForm, в качестве ссылки oForm:

Название Класса Родительский Класс Примечание

Form

n/a

Базовый класс формы Visual FoxPro.

frxBaseForm

Form

Осуществяет обработку ошибок и поддежку больших шрифтов.

frxPreviewForm

frxBaseForm

Приводит в исполнение API контейнер просмотра.

.ShowWindow = 1 - на форме переднего плана (top-level)

frxPreviewAsTopForm

frxPreviewForm

.ShowWindow = 2 - как форма переднего плана (top-level)

frxPreviewInScreen

frxPreviewForm

.ShowWindow = 0 - на экране Visual FoxPro

frxPreviewInDesktop

frxPreviewForm

.Desktop = .T.

Свойства и методы, описанные ниже, являются элементами объекта frxPreviewProxy.

Дополнительные Свойста и Методы

В дополнение к стандартному API контейнеру просмотра, компонент по умолчанию, возвращаемый ReportPreview.App, предосталяет другие свойства и методы, которые используются для управленя внешним обликом окна просмотра, когда используется режим просмотра отчета под управлением объекта (object-assisted).

Свойсва

Данные свойства управляют только начальным состоянием окна просмотра. Если установлены значения, отличные от значений по умолчанию, то эти значение свойств получают приоритет над какими-либо предпочнениями, хранящимися в файле ресурсов (обычно FoxUser.dbf).

Название свойства Тип Описание

Top

I целый

Определяет вертикальное смещение формы просмотра относитель верхнего края главного окна Visual FoxPro, в пиксел.

Left

I целый

Определяет горизонтальное смещение формы просмотра относительно левого края главного окна Visual FoxPro, в пиксел.

Width

I целый

Определяет размер по горизонтали формы просмотра в пиксел.

Height

I целый

Определяет размер по вертикали формы просмотра в пиксел.

ToolbarIsVisible

L логический

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

Caption

C символьный

Определяет заглавие окна просмотра.

CanvasCount

I целый

Определяет первоначальное количество страниц, изображенных на форме. Допустимые значения - 1, 2, или 4.

ZoomLevel

I целый

Определяет первоначальную степень масштабирования. Возможные значения:

1 - 10%

2 - 25%

3 - 50%

4 - 75%

5 - 100% (по умолчанию)

6 - 150%

7 - 200%

8 - 300%

9 - 500%

10 - страница целиком

CurrentPage

I целый

Определяет номер страницы, показанной изначально. По умолчанию - 1. Если он больше, чем количество страниц в отчете, то будет показана последняя страница.

TopForm

L логический

Если = .Т., то определяет форму просмотра как автономную переднего плана. Этим самым установит немодальный  (NOWAIT) сеанс просмотра и панель инструментов (toolbar) автоматически пристыкуется к вехнему краю формы. Значение по умоляанию - ЛОЖЬ (.F.).

TextOnToolbar

L логический

Определяет, что на кнопках панели инструментов будут показывать текстовые заголовки. Значение по умоляанию - ЛОЖЬ (.F.).

Методы

В дополнение к методам, определенным  API Контейнером Просмотра , штатный контейнер просмотра также предоставляет все общедоступные методы базового класса формы.

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

Метод Описание

SetCurrentPage( iPageNo )

Переместиться на станицу с заданным номер.

SetCanvasCount( iCount )

Изменить количество страниц, изображаемых на форме просмотра.

SetZoomLevel( iLevel )

Отмасштабировать показанные страницы.

SetExtensionHandler( oRef )

Назначить программу обрабатки расширенных функциональных возможностей. (Смотри ниже)

Интерфейс Программы Обработки Расширенных Функциональных Возможностей

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

Используйте SetExtensionHandler(), чтобы передать штатному контейнеру просмотра ссылку на объект, который обеспечивает выполнение определенного набора "перехватывающих" методов, выполняемых в определенные моменты. Смотри ниже API и пример использования.

Свойства Обработчика Расширенных Возможностей Просмотра

 

Свойство   Описание

PreviewForm

Обратная ссылка на форму просмотра. Если этого свойства нет, то оно будет создано штатным контейнером просмотра вызовом функции ADDPROPERTY(), и ему будет присвоена ссылка на форму просмотра. Контейнер просмотра автоматически обнуляет обратную ссылку перед тем, как закрыться, дабы избежать зависания, которое не позволит закрыться форме.
 

Полезные свойства .PreviewForm:

  • .PreviewForm.oReport ссылается на активный приемник отчета

  • .PreviewForm.Toolbar ссылается на объект панели инструментов.

Метобы Обработчика Расширенных Возможностей Просмотра

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

Метод Описание

AddBarsToMenu( cPopupName, iNextBarNum )

Данный метод вызывается из события RightClick() формы просмотра, непосредственно перед командой ACTIVATE POPUP (m.cPopupName), таким образом вы можете удалить пункты меню или изменить их.

cPopupName - название пункта меню.

iNextBarNum  - следующий доступный номер пункта в меню.

Так как вы не можете использовать ключевое слово THIS в меню в команде ON SELECTION.. , форма просмотра делает ссылку на саму себя и помещает ее в переменную oRef.

HandledKeyPress( nKey, nModifier )

Данный метод вызывается из события Keypress() формы просмотра. Возвращайте ИСТИНА (.T.), если вы желаете заменить штатную реакцию на нажатие определенной клавищи. Этот метод вызывается до обработки нажатия клавиши формы просмотра, таким образом, вы можете переписать события нажатия отдельных клавиш..

Show( iStyle )

Данный метод вызывается из события Show() формы просмотра. он дает вам возможность управлять панелью инструментов просмотра через ссылку на THIS.PreviewForm.Toolbar. На самом деле, панель инструментов сосздается в событии Init() формы просмотра, но обработчик расширенных возможностей еще не назначет на тот момент, таким образом, метод Show() - наилучшее место для кода, задающего конфигурацию и внешний облик панели инструментов.

Обратите внимание, что и панель инструментов также имеет обратную ссылку PreviewForm на форму просмотра , значит вы можете добавить командную кнопку с кодом THIS.Parent.PreviewForm.ExtensionHandler.MyCustomMethod() на событие Click().

Paint()

Вызывается из события Paint() формы просмотра, после того, как завершилось формирование изображения стрниц отчета.

Release()

Вызывается из события Release(). Возвращая ЛОЖЬ (.F.) из этого метода, вы можете запретить закрытия формы просмотра.

Пример: Настройка Контейнера Просмотра с Применением Обработчика Расширенных Возможностей

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

  Cкопировать Код
* Установить экземпляр штатного контейнера просмотра:
pc = .NULL.
DO (_REPORTPREVIEW) WITH pc

* Установить некоторые начальные значения свойств:
WITH pc
    .Caption = "Мое Собственное Окно Просмотра"
    .ZoomLevel = 4   && 75%
    .CanvasCount = 1
ENDWITH

* Создать экземпляр Обработчика Расширений:
xh = NEWOBJECT("MyRetroPreview")

* Назначить его контейнеру просмотра:
pc.SetExtensionHandler( m.xh )

* Установить приемник отчета и передать ему  наш контейнер просмотра:
rl = NEWOBJECT("Reportlistener")
rl.ListenerType = 1
rl.PreviewContainer = pc

* Запустить отчет:
REPORT FORM (_SAMPLES+"\solution\reports\colors.frx") OBJECT rl 
RETURN

*---------------------------------------------
* Класс Обработчика Расширений:
*---------------------------------------------
DEFINE CLASS MyRetroPreview AS Custom

    PROCEDURE AddBarsToMenu( cPopup, iNextBar )
        * Убрать возможность изменения количества страниц:
        RELEASE BAR 8 OF (m.cPopup)
    ENDPROC

    PROCEDURE Show( iStyle )
        * Убрать возможность изменения количества страниц:
        THIS.PreviewForm.Toolbar.opgPageCount.Visible = .F.
        THIS.PreviewForm.CanvasCount = 1
    ENDPROC

    PROCEDURE HandledKeyPress( nKeyCode, nShiftAltCtrl )
        RETURN .F.
    ENDPROC

    PROCEDURE Paint()
    ENDPROC

    PROCEDURE Release()
        RETURN .T.
    ENDPROC

ENDDEFINE

Использование Файла Ресурсов

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

Предпочтения к окну и панели инструментов сохраняются в таблице FOXUSER, с полем ID = "9REPPREVIEW". Предпочитаемые размеры и расположения окна и панели инструментов сохраняются самостоятельно для каждого файла отчета. Позиция и строение панели инструментов просмотра общие для всех просмотров отчета. Если файл ресурсов недоступен или открыт только для чтения, то предпочтения не сохраняются.

Смотри Также