Защита программы с помощью отчета

отредактировано August 2012 Раздел: FastReport 4.0
Здравствуйте уважаемые любители и профессионалы. Подскажите как в событии OnEndDoc получить значение определенной переменной отчета?
Если присваиваю значение переменной сам, то она видна.
Делаю перед ShowReport
frxReport1.Variables:= ''+ pFIBDataSet1.FBN('MyVar').AsString +'';
Затем в OnEndDoc читаю
Index := frxReport1.Variables.IndexOf('VAR1');
if Index <> -1 then
Variable := frxReport1.Variables.Items[Index];
if Variable.Value <> pFIBDataSet1.FBN('MyVar').AsString then
так все работает. Но мне надо проверить что находится в этой переменной без присвоения. Т.е. в дизайнере делаю переменную VAR1 , в OnGetValue пишу if VarName = 'VAR1' then Value := pFIBDataSet1.FBN('MyVar').AsString;
И в OnEndDoc получаю NULL. Что делаю неправильно?

Комментарии

  • gpigpi
    отредактировано 01:26
    Попробуйте
    frxReport1.EngineOptions.DestroyForms := False
  • отредактировано August 2012
    Нет, все равно Null. Ставил и в OnGetValue и в OnEndDoc. Результат один. Может еще есть какие варианты?
    Можно конечно присваивать значение. Но как потом узнать что эта переменная будет печататься? Значение будет то что надо, но ведь переменную не обязательно вставлять в какое-нибудь Мемо. Вбил любые данные вместо переменной и все будет работать.
  • gpigpi
    отредактировано 01:26
    написал:
    Но как потом узнать что эта переменная будет печататься?
    Объясните подробнее, какой результат Вы хотите получить. Смысл Вашего вопроса мне не понятен
  • отредактировано 01:26
    Я хочу сделать простенькую защиту для своей программы. Защита будет привязана к данным клиента. Основное назначение программы – печать документов. Получается что вся ценность в печатных формах. В форме есть переменная, в которую будет заноситься название организации. Чтобы обойти защиту, можно удалить эту переменную и забить название любой организации жестко в мемо. Т.е. сама переменная в отчете будет, но выводить она ничего не будет. Вот я и хочу после формирования отчета узнать, что находится в этой переменной и выводится ли то что мне надо на печать. Если переменной нет или в ней не то что нужно, печатать на листе ДЕМО. Вот примерно так. Может конечно есть другие варианты, подскажите пожалуйста.
  • отредактировано August 2012
    Я так понимаю что на мой вопрос нет ответа. Может как по другому можно сделать? Наверняка же кто-то делал уже.
  • gpigpi
    отредактировано 01:26
    Вашу защиту с переменной легко будет обойти - достаточно сделать шрифт белым, а в шаблон добавить дополнительный текст.
    Для демо-версии проще заблокировать возможность экспорта и сохранения сформированныхстраниц превью, а во время печати добавлять надпись ДЕМО на печатаемую страницу в событии TfrxReport.OnPrintPage
  • отредактировано August 2012
    Я сделал примерно так. Проверяю наличие поля в отчете. Если поле есть, проверяю есть ли в этом поле переменная. Если переменная есть печатаю отчет. Если чего то нет, то выводим надпись Демо. Перед печатью проверяю чтобы поле было определенного размера, в определенном месте, видимое и с черным шрифтом. Защита понятно несложная, но какие еще есть методы ее обойти?
  • gpigpi
    отредактировано 01:26
    В каких событиях TfrxReport Вы выполняете проверку?
  • отредактировано 01:26
    Наличие переменной проверяю в OnPrintPage и в OnEndDoc. А размеры, видимость поля и цвет шрифта в OnPreview.
  • gpigpi
    отредактировано 01:26
    Если у пользователя нет возможности сохранять и редактировать страницы превью, то всё правильно
  • отредактировано 01:26
    Спасибо большое за консультацию.

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.