Использования ресурсов для хранения отчетов Fr

LOGic_BBSLOGic_BBS Казань
отредактировано October 2007 Раздел: FastReport 4.0
Иногда не обходимо что бы конечные пользователи программы не имели возможности не то чтобы изменять или копировать отчеты, но и даже и не догадывались, что в программе используется такой замечательный продукт как FastReport. Как создать собственное окно предварительного просмотра, я рассказал, Туттеперь расскажу, как спрятать темплейты отчетов от посторонних глаз.
Идея заключается в том что бы, темплейты отчетов хранить в нутрии исполняемого файла и в нужный момент извлекались и выполнялись. Сразу скажу, что идея не моя, я ее подсмотрел у замечательного человека, который разрешил мне об ней рассказать.
Для начала, мы создадим файлы отчетов в FR и сохраним их в директорию ReportList, следующий шаг, создания описания ресурсов, создаем текстовый файл следующего содержания:

TEST RCDATA ".\ReportList\Test.fr3"
TEST2 RCDATA ".\ReportList\Test2.fr3"

и сохранить как TestFR.rc.
Потом скомпилировать его командой BRCC32 TestFR.rc и получить TestFR.res В начало модуля добавь строчку {$R TestFR.res}.

Или можно лучше, использовать библиотеку RxLib, что намного проще и доступнее. После его установки в меню View появится пунктик Project Resources. Hужно выбрать Project Resources->New->User Data и добавить нужные файлы отчетов.

Пишем процедуру извлечения нужного нам ресурса.
private
    { Private declarations }
     procedure LoadRptFromResource(Report: TfrxComponent; const ResName: string);
...............
procedure TFormMain.LoadRptFromResource(Report: TfrxComponent;
           const ResName: string);
var
  m: TResourceStream;
begin
  m := TResourceStream.Create(HInstance, ResName, RT_RCDATA);
  try
    m.Position := 0;
    Report.LoadFromStream(m);
  finally
    m.Free;
  end;
end;
Теперь самое основное и за чего, все это затевалось, пишем обработчик печати нашего отчета.
procedure TFormMain.Button1Click(Sender: TObject);
var
Report: TfrxReport;
begin

 Report:= frxReportMain;
 Report.Preview := nil;

 Report.Script.Variables['dDAT'] := Edit1.Text;

 //Report.LoadFromFile( ExtractFilePath(Application.ExeName) + 'ReportList\Test.fr3 ');
 // Для отладки все таки, удобнее использовать LoadFromFile. После отладки и после 
 // создания файла описания ресурсов отчета, можно применить процедуру LoadRptFromResource    
 LoadRptFromResource(Report, 'Test'); // загрузка репорта из ресурсов
 Report.PrepareReport(True);

 //Report.LoadFromFile( ExtractFilePath(Application.ExeName) + 'ReportList\Test2.fr3 ');
 //
 LoadRptFromResource(Report, 'Test2'); // загрузка репорта из ресурсов
 Report.PrepareReport(False);

 Report.Preview:= PreviewForm.frxPreviewMain;
 PreviewForm.ShowModal;
end;

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

Комментарии

  • Stalker4Stalker4 123
    отредактировано 20:32
    LOGic_BBS написал: »
    теперь расскажу, как спрятать темплейты отчетов от посторонних глаз.
    Это все имеет смысл, только если программа не работает с БД, иначе отчеты гораздо проще хранить именно в БД.
  • отредактировано 20:32
    предалагаю разработчикам сайта создать какой-нибудь FAQ и помещать туда подобные темы.
    просто когда такие темы разбросаны по всему форуму это затруднительно для самих пользователей форума, а так все интересные разработки самих пользователей FR можно будет найти в одном месте!

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

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