В Visual FoxPro 9.0 в команду MODIFY REPORT | LABEL введено новое ключевое слово: PROTECTED. Когда дизайнер отчета или этикеток открыты в защищенном режиме, то различные возможности дизайнера отключены или ограничены в зависимости от установленных разработчиком настроек защиты.

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

В Visual FoxPro 9.0 Вы можете настроить параметры защиты через пользовательский интерфейс, предоставляемый используемым по умолчанию приложением построителя отчетов (ReportBuilder.app). Штатные диалоговые окна дизайнера отчетов не имеют интерфейса для редактирования флагов защиты.

Флаги защиты

Типы флагов защиты

Следующие константы определены в файле foxpro_reporting.h, расположенном в директории ..\FFC\.

Имейте в виду, что эти константы определяют значение позиции бита (bit position) в каждом флаге, но не собственно целочисленное значение флага.

Флаги защиты для элементов отчета

Константы из foxpro_reporting.h Значение Описание

FRX_PROTECT_OBJECT_LOCK

0

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

FRX_PROTECT_OBJECT_HIDE

1

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

FRX_PROTECT_OBJECT_NO_DELETE

2

Элемент отчета, для которого установлен этот флаг, не может быть удален (Delete) или вырезан (Cut). Вы можете выбрать его, скопировать в буфер обмена при помощи клавиш Ctrl-C и вставить новый элемент в отчет.

NoteВажное замечание

Без активного штатного приложения построителя отчетов (ReportBulder.app) наряду с прочими атрибутами в новый элемент отчета будут также скопированы и флаги защиты. Это значит, что Вы не сможете передвинуть новый элемент отчета, вставленный из буфера обмена. В связи с этим обстоятельством, используемое по умолчанию приложение построителя отчетов ReportBuilder.App автоматически удаляет флаги защиты в новом элементе отчета, созданном через операцию вставки. Эта операция запрограммирована в классе PasteUnprotectFilter, зарегистрированном по умолчанию в настроечной таблице приложения построителя отчетов. Смотрите Report Builder Event Handler Registry Table для получения дополнительной информации.

FRX_PROTECT_OBJECT_NO_EDIT

3

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

FRX_PROTECT_OBJECT_NO_SELECT

6

Элемент отчета, для которого установлен этот флаг, не может быть выбран при помощи мыши или клавиши TAB. Изменение курсора мыши для изменения размера объекта также не происходит. Этот флаг дает тот же эффект, что и два флага OBJECT_NO_EDIT + OBJECT_LOCK.

Вообще говоря, с практической точки зрения:

  • Флаг защиты NO_SELECT фактически включает в себя флаги защиты LOCK + NO_EDIT + NO_DELETE, даже если эти флаги не были установлены явно.

  • Флаг защиты HIDDEN фактически включает в себя флаги защиты LOCK + NO_EDIT + NO_DELETE + NO_SELECT, даже если эти флаги не были установлены явно.

Флаги защиты для полос отчета

Константы из foxpro_reporting.h Значение Описание

FRX_PROTECT_BAND_NO_EDIT

4

Диалоговое окно Band Properties (свойства полосы отчета) не доступно. Двойной щелчок мыши по полосе отчета не даст никакого эффекта.

FRX_PROTECT_BAND_NO_RESIZE

14

Вертикальный размер полосы отчета заблокирован. Полоса отчета не может изменить свой размер в дизайнере.

Флаги защиты, применяемые для всех элементов отчета

Константы из foxpro_reporting.h Значение Описание

FRX_PROTECT_REPORT_NO_PREVIEW

7

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

FRX_PROTECT_REPORT_NO_OPTBAND

8

Диалоговое окно Optional Bands (дополнительные полосы отчета) не доступно.

FRX_PROTECT_REPORT_NO_GROUP

9

Диалоговое окно Data Grouping (группировка данных) не доступно.

FRX_PROTECT_REPORT_NO_VARIABLES

10

Диалоговое окно Report Variables (переменные отчета) не доступно.

FRX_PROTECT_REPORT_NO_PAGESETUP

11

Диалоговое окно Page Setup (настройки страницы) не доступно.

FRX_PROTECT_REPORT_NO_DATAENV

13

Окружение данных (Data Environment) отчета не может быть изменено.

FRX_PROTECT_REPORT_NO_PRINT

15

Отчет не может быть отправлен на печать из дизайнера. Пункты меню Run Report и Print… будут не доступны.

Как сохранить флаги защиты в отчете

Флаги защиты хранятся в мемо-поле с именем ORDER в файле FRX в записях заголовка отчета и в отдельных записях для каждого элемента отчета и полос отчета.

Если Вы не используете приложение построителя отчетов по умолчанию (ReportBuilder.app), то Вы можете установить флаги, открыв файл .frx или .lbx и заменив ранее сохраненное в поле ORDER значение на нужное Вам значение, определив его следующим способом:

Значение флага защиты - это суммирование с последующим сохранением как двоичных символьных данных в поле ORDER. Например: FRX_PROTECT_OBJECT_LOCK + FRX_PROTECT_OBJECT_NO_DELETE + FRX_PROTECT_NO_EDIT = 2^0 + 2^2 + 2^3 = 1+4+8 = 13. В результате, поле ORDER будет содержать CHR(13).

Фундаментальный класс "FRX Cursor" включает несколько методов, которые являются полезными в извлечении и замене флагов защиты, как показано в примере ниже.

Пример

 CopyCode imageКопировать код
#INCLUDE foxpro_reporting.h
LOCAL oFrxHelper, cReport, iFlags

* Создание объекта "helper" (помощник):
oFrxHelper = NEWOBJECT( "frxCursor", HOME()+ "\FFC\_frxcursor.vcx")

* Выбрать файл отчета:
cReport = GETFILE("FRX")

* Открыть файл отчета как таблицу:
USE (m.cReport) ALIAS frx

* Перейти к записи, содержащей заголовок отчета:
LOCATE FOR frx.objtype = FRX_OBJTYP_REPORTHEADER and ;
           frx.objcode = FRX_OBJCOD_REPORTHEADER and ;
           frx.platform = FRX_PLATFORM_WINDOWS

* Извлечь текущие настройки защиты:
iFlags = oFrxHelper.BinStringToInt( frx.ORDER )

* Предотвращение доступа к диалоговому окну "Report Variables" (переменные отчета):
iFlags = BITSET( iFlags, FRX_PROTECT_REPORT_NO_VARIABLES )

* Сохранение измененных настроек на прежнем месте файла frx:
REPLACE frx.order WITH oFrxHelper.IntToBinString( iFlags )
USE IN frx

* Редактивроание отчета в защищенном режиме:
MODIFY REPORT FORM (cReport) PROTECTED

Смотрите также