Проверка наличия ВИДИМОГО текста в отчете
В общем такая проблема.
Мне позарез нужно убедиться, что пользователи редактируют печатные бланки в дозволенных рамках и не удаляют (или каким иным способом делают невидимым) Memo с определенным текстом.
Т.е. при старте программы когда будет грузиться отчет из файла (который можно редактировать) должна быть осуществлена проверка.
Вот набросал немножко. Но этого мало. Ведь фантазия у людей буйная.
Можно придумать что угодно - занести Top и Left за пределы страницы, можно накрыть вывод этого поля белым прямоугольником, можно ужать Memo до размеров точки...
Что посоветуете? Какие шаги и дополнительные проверки надо предпринять, чтобы максимально выполнить условия поставленной задачи. Если не 100% гарантировать вывод нужного поля на лист бумаги, то хотя бы максимально усложнить задачу по обходу этого требования.
Может есть возможность проверить не бланк отчета, а уже напечатанный отчет? Или после печати сделать экспорт в текстовый файл и поискать строку там.
Но, повторю, мне надо максимально точно знать - пытается обойти пользователь условие или нет.
Очень расчитываю на вашу помощь.
Мне позарез нужно убедиться, что пользователи редактируют печатные бланки в дозволенных рамках и не удаляют (или каким иным способом делают невидимым) Memo с определенным текстом.
Т.е. при старте программы когда будет грузиться отчет из файла (который можно редактировать) должна быть осуществлена проверка.
Result=0;
for (i=1;i<=MainForm->Blank1Report->ComponentCount;i++) {
Tmp=MainForm->Blank1Report->Pages[0]->Components[i-1]->ClassName();
if (Tmp=="TfrxMemoView") {
Memo=dynamic_cast<TfrxMemoView *>(MainForm->Blank1Report->Pages[0]->Components[i-1]);
if (Memo->Text==(AnsiString)"[ConfigurationDataset.\"Название\"]\r\n") {
if ((Memo->Visible==True) && (Memo->Font->Size>=8) && (Memo->Font->Color==clBlack)) {
Result=1;
}
}
}
}
Вот набросал немножко. Но этого мало. Ведь фантазия у людей буйная.
Можно придумать что угодно - занести Top и Left за пределы страницы, можно накрыть вывод этого поля белым прямоугольником, можно ужать Memo до размеров точки...
Что посоветуете? Какие шаги и дополнительные проверки надо предпринять, чтобы максимально выполнить условия поставленной задачи. Если не 100% гарантировать вывод нужного поля на лист бумаги, то хотя бы максимально усложнить задачу по обходу этого требования.
Может есть возможность проверить не бланк отчета, а уже напечатанный отчет? Или после печати сделать экспорт в текстовый файл и поискать строку там.
Но, повторю, мне надо максимально точно знать - пытается обойти пользователь условие или нет.
Очень расчитываю на вашу помощь.
Комментарии
Могу предложить один вариант, который подойдёт в том случае, если неизменяемые элементы статичны и не располагаются на одном бэнде с элементами, которые можно изменить.
Для этого неизменяемые элементы нужно вынести в отдельный шаблон отчёта, который можно зашить в DFM, и формировать отчёт объединением нескольких шаблонов.
Придётся также запретить пользователям редактировать уже сформированный отчёт, сохранять его в fp3-файл, экспортировать. Правда, продвинутые юзеры могут установить в системе PDF принтер и отредактируют полученный PDF-файл
Главное, чтобы он был видим и выходил на печать.
Конечно, можно даже в Word делать экспорт и править его там. Но это сильно усложнит задачу и не многие на это пойдут. Специфика работы такая.
Представьте - стоит очередь забирать трубки а приемщица сидит и перебивает чужие реквизиты. Конечно, не факт, что не все пойдут на это, но часть уже отсеится.
Вообще расскажу задачу поподробнее.
Программа - учет заказов и запчастей для СЦ сотовых.
Кому интересно - можете демку скачать с сайта. http://sc.adalon.ru
Реквизиты СЦ вшиты в ключ и выводятся на печать.
Теперь представим, что я вам подарил свой ключ, а вы просто напросто вбили свои реквизиты в бланки и пользуясь чужим ключом можете спокойно печатать для себя.
Вот я и хочу как можно больше усложнить жизнь таким людям.
Вот еще хотел спросить, особенно у авторов.
Есть такое свойство у экспортных элементов.
ExportNonPrintable
Что туда входит? Будет ли туда входить все, что:
- уменьшено до размеров точки
- имеет белый цвет или цвет фона
- вынесено за пределы страницы
и т.д.
Может быть просто проверить наличие нужного текста в Memo а потом после постройки отчета проверить этот же текст в уже построенном отчете или списке компонент, не попавших на печать по определенным причинам?
1)отключил кнопку редактирования страницы
2)если в Preview у поля Restrictions значение rfDontModify:=false то я по щелчку взбрасываю окно редактирования текста.
вот и всё