Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Создание динамических объектов в FastReport


Автор: Evgesha 20.6.2006, 23:58
Как создать диномические объекты в FastReport
Например линии, прямоугольники, круги 

Автор: bas 21.6.2006, 10:33
Цитата

Построение отчета при помощи кода
Иногда возникает необходимость печати отчета, структура которого неизвестна на стадии проектирования приложения или может меняться в процессе работы программы. В этом случае встает необходимость динамического формирования шаблона отчета. При этом в отличие от ситуации, скажем, с добавленем нового бланка для бухгалтерской программы, где можно использовать принцип т.н. end-user-отчетов, форма отчета не является фиксированной и, соответственно, не может быть определена программистом в виде отдельного файла.
FastReport предоставляет возможность динамического создания форм отчетов с помощью программного кода, как это можно делать, например, с объектами VCL. Пример программного построения формы отчета находится в подкаталоге RUNTIME каталога примеров FastReport.
В этом примере по нажатию кнопки строится отчет, позволяющий получить список компаний из таблицы CUSTOMER.DB. Текст обработчика события OnClick этой кнопки приведен ниже:
    
    procedure TForm1.Button1Click(Sender: TObject);
    var
   v: TfrView;
   b: TfrBandView;
   Page: TfrPage;
    begin
   frReport1.Pages.Clear;
   frReport1.Pages.Add;              // create page
   Page := frReport1.Pages[0];
    
   b := TfrBandView(frCreateObject(gtBand, ''));  // create MasterData band
   b.SetBounds(0, 20, 0, 20);
   b.BandType := btMasterData;
   b.Dataset := 'frDBDataSet1';
   Page.Objects.Add(b);
    
   v := frCreateObject(gtMemo, '');  // create data field
   v.SetBounds(20, 20, 200, 16);
   v.Memo.Add('[Table1."Company"]');
   Page.Objects.Add(v);
    
   frReport1.ShowReport;
    end;
    
Этот код сначала удаляет все имеющиеся в форме отчета страницы, а потом создает одну чистую:
    
    frReport1.Pages.Clear;
    frReport1.Pages.Add;              // create page
    
Далее на этой странице создается одна секция типа «Master data» и привязывается к источнику данных.
    
    Page := frReport1.Pages[0];
    
    b := TfrBandView(frCreateObject(gtBand, ''));  // create MasterData band
    b.SetBounds(0, 20, 0, 20);
    b.BandType := btMasterData;
    b.Dataset := 'frDBDataSet1';
    Page.Objects.Add(b);
    
Следующим шагом создается один объект «Текст» с привязкой его к полю COMPANY таблицы CUSTOMER.DB:
    
    v := frCreateObject(gtMemo, '');  // create data field
    v.SetBounds(20, 20, 200, 16);
    v.Memo.Add('[Table1."Company"]');
    Page.Objects.Add(v);
    
Последнее, что делает указанный обработчик события – это выводит подготовленный отчет на предварительный просмотр.

 

Автор: Evgesha 24.6.2006, 12:19
Блин забыл написать я на билдере пишу 

Автор: sexton 26.6.2006, 15:37
Ну и что? Из Delphi в билдер все прекрасно переводится. 

Автор: Evgesha 26.6.2006, 20:02
Да спасибо я уже все зделал
И тему я уже закрыл  smile  

Автор: SAndrus 26.7.2010, 12:16
А может кто знает, как динамически скопировать объект???
Т.е. у меня есть Memo мне бы такуюже в том же месте, а потом отодвинуть и пр.
Тоже в FastReporte.
Спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)