Нет, ребята, все не так. Как обратится к мемо.

отредактировано 17:09 Раздел: FastReport 2.xx VCL
Нет, ребята, все не так. Как вы помните стояла задача сделать что-то типа защиты от несанкционированного использования. В отчете из одной страницы был адрес организации. Как сделать так чтобы он всегда печатался той организации которой я продал программу? При этом клиент мог изменять отчет, подгонять его под принтер и т.п. А вот так:

var
mv : TfrMemoView;
begin
with Report1 do begin
if not LoadFromFile('AktDual1.frf') then begin
ShowMessage('Не могу загрузить файл отчета: '+'AktDual1.frf');
Exit;
end;//if not LoadFromFile

PrepareReport;
EMFPages.ObjectsToPage(0);
gbOKPass := False;
for i := 0 to Pages.Pages[0].Objects.Count - 1 do begin
mv := Pages.Pages[0].Objects.Items;
if (mv.Name = 'meAdrZ_1') then begin //ищем мемо с моим названием
if mv.BandAlign = 4 then begin // проверяем его месторасположение, размеры, шрифт
if mv.dy >= 14 then begin
if mv.Font.Size in [7..11] then begin
if mv.x in [10..200] then begin
if mv.y in [10..100] then begin

if pos(TestAddr,Addr) > 0 then begin// есть ли в адресе правильный адрес?
gbOKPass := True;
Pages.Pages[0].Objects.Delete(i);// уничтожаем этот объект
mv.FillColor := clWhite;// делаем его не прозрачным
mv.Memo.Text := Addr;// пишем правильный адрес
mv.gapx := 2; // устанавливаем для него правильное расположение в рамке
mv.gapy := 0;
EMFPages.Pages[0].Page.Objects.Add(mv);
{ добавляем на старое место, т.к. они могли бы поверх моего адреса
создать свой мемо и закрасить его и мой адрес хоть и присутствует, а не печатался бы
}
EMFPages.PageToObjects(0);
Break;// выходим из цикла
end;

end;
end;
end;
end;
end;
end;
end;//for

if gbOKPass then begin
if gbPrintPreview then ShowPreparedReport
else begin
PrintPreparedReport('', 1, True, frAll);
end;
end else begin
ShowMessage('Это лицензионная копия программы?');
exit;
end;

end;//with
end;

У кого есть замечания?

Комментарии

  • отредактировано 17:09
    Ну хорошо, FRF ты "защитил", а вот защиты самой программы я чегой-то не вижу ;) )
  • отредактировано 17:09
    Саму прогу защитить можно по-разному. кому как нравится.
    хоть шифруй, хоть пакуй.
    Найдите еще два необходимых дополнения для 100% защиты отчета (или три).
  • отредактировано 17:09
    Для начала: нет проверки на видимость Memo, цвет шрифта=белый ...
    Для "продвинутых пользователей": нет проверки что над твоей мемой нету объекта, который полностью перекрывает твою писанину и выводит нужный текст ;) )
  • отредактировано 17:09
    to Vano:
    Объект который перекрывает перекрывается Add(mv) - это ты проглядел.
    И еще скрипт надо порубить:
    mv.Script.Clear;
    Так что ты - молодец.
  • отредактировано November 2004
    2 vv_fran:

    Я могу привести МАССУ способов как обойти твою "защиту" - вот самый простой на мой вгляд:
    Сам документ формируется на второй странице, а первую делают так, чтобы в идеале она была совершенно пустая.
    Ну теперь нетрудно понять что происходит при печати - первый лист просто выкидывается (либо используется повторно ;) ))
  • отредактировано 17:09
    to Vano
    добавляем:

    if Pages.Count > 1 then exit;

    Ну больше я способов и не вижу...
  • отредактировано 17:09
    Еще вопрос.
    Я делаю PrepareReport
    и не печатаю и нет предварительного просмотра. Надо ли как-то освобожать память? В Хелпе не сказано ничего. А если сделать Free, то следующие отчеты падают с Аксес Виолейшен.
  • отредактировано 17:09
    написал:
    добавляем:
    if Pages.Count > 1 then exit;
    Ну больше я способов и не вижу...

    Не понял из какого места EXIT ?
  • отредактировано 17:09
    Да тут:
    PrepareReport;
    if Pages.Count > 1 then exit;

    можно и во внуть if-оф засунуть
    if Pages.Count = 1 then begin

    это уже не принципиально.
  • отредактировано 17:09
    2 vv_fran:

    Т.е. ты своим клиентом говоришь прямо - документ может быть ТОЛЬКО на одной странице, т.к. я забочусь о защите ПО от нелегального использования ???
    На месте клиентов я бы начал искать другого разработчика ;) )

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

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