FastReport 如何透過程式碼建立報告表單

roffey發表於2021-05-07

FastReport VCL是用於Delphi,C ++ Builder,RAD Studio和Lazarus的報告和文件建立VCL庫。它提供了視覺化模板設計器,可以訪問最受歡迎的資料來源,報告引擎,預覽,將過濾器匯出為30多種格式,並可以部署到雲,Web,電子郵件和列印中。


近日,FastReport VCL更新至v6.9,在新版本中,在PDF匯出中增加了對以下物件的互動式表單支援:文字,核取方塊和圖片。能夠透過InteractiveFormsFontSubset屬性將所需的字形僅包含在互動式形式中。同時修復了多個Bug問題。歡迎下載體驗。(點選下方按鈕下載)


【慧都網】下載FastReport VCL v6.9最新版

如果您對該圖表控制元件感興趣,可以在慧都網免費下載最新試用版,歡迎加入圖表控制元件QQ交流群:740060302

通常,您將使用設計器建立大多數報告。但是,在某些情況下(例如,當報告的表單未知時),有必要透過程式碼手動建立報告。

要手動建立報告,應按順序執行以下步驟:

  • 清除報告元件
  • 新增資料來源
  • 新增“資料”頁面
  • 新增報告頁面
  • 在頁面上新增樂隊
  • 設定頻段的屬性,然後將其連線到資料
  • 在每個頻段上新增物件
  • 設定物件的屬性,然後將它們連線到資料

讓我們檢查一下“列表”型別的簡單報告的建立。假定我們具有以下元件:frxReport1:TfrxReport和frxDBDataSet1:TfrxDBDataSet(最後一個連線到DBDEMOS的資料,«Customer.db»表)。我們的報告將包含一頁帶有“報告標題”和“主資料”帶的頁面。在“報告標題”區域中,將出現一個帶有“ Hello FastReport!”的物件。文字,而“主資料”將包含一個物件,該物件具有指向“ CustNo”欄位的連結。
Pascal:

var
  DataPage: TfrxDataPage;
  Page: TfrxReportPage;
  Band: TfrxBand;
  DataBand: TfrxMasterData;
  Memo: TfrxMemoView;
{ clear a report }
frxReport1.Clear;
{ add a dataset to the list of ones accessible for a report }
frxReport1.DataSets.Add(frxDBDataSet1);
{ add the "Data" page }
DataPage := TfrxDataPage.Create(frxReport1);
{ add a page }
Page := TfrxReportPage.Create(frxReport1);
{ create a unique name }
Page.CreateUniqueName;
{ set sizes of fields, paper and orientation by default }
Page.SetDefaults;
{ modify paper’s orientation }
Page.Orientation := poLandscape;
{ add a report title band}
Band := TfrxReportTitle.Create(Page);
Band.CreateUniqueName;
{ it is sufficient to set the «Top» coordinate and height for a band }
{ both coordinates are in pixels }
Band.Top := 0;
Band.Height := 20;
{ add an object to the report title band }
Memo := TfrxMemoView.Create(Band);
Memo.CreateUniqueName;
Memo.Text := 'Hello FastReport!';
Memo.Height := 20;
{ this object will be stretched according to band’s width }
Memo.Align := baWidth;
{ add the masterdata band }
DataBand := TfrxMasterData.Create(Page);
DataBand.CreateUniqueName;
DataBand.DataSet := frxDBDataSet1;
{ the Top coordinate should be greater than the previously added band’s top + height}
DataBand.Top := 100;
DataBand.Height := 20;
{ add an object on master data }
Memo := TfrxMemoView.Create(DataBand);
Memo.CreateUniqueName;
{ connect to data }
Memo.DataSet := frxDBDataSet1;
Memo.DataField := 'CustNo';
Memo.SetBounds(0, 0, 100, 20);
{ adjust the text to the right object’s margin }
Memo.HAlign := haRight;
{ show the report }
frxReport1.ShowReport;

C ++:

TfrxDataPage * DataPage;
TfrxReportPage * Page;
TfrxBand * Band;
TfrxMasterData * DataBand;
TfrxMemoView * Memo;
// clear a report 
frxReport1->Clear();
// add a dataset to the list of ones accessible for a report 
frxReport1->DataSets->Add(frxDBDataset1);
// add the "Data" page 
DataPage = new TfrxDataPage(frxReport1);
// add a page
Page = new TfrxReportPage(frxReport1);
// create a unique name 
Page->CreateUniqueName();
// set sizes of fields, paper and orientation by default 
Page->SetDefaults();
// modify paper’s orientation
Page->Orientation = poLandscape;
// add a report title band
Band = new TfrxReportTitle(Page);
Band->CreateUniqueName();
// it is sufficient to set the «Top» coordinate and height for a band 
// both coordinates are in pixels 
Band->Top = 0;
Band->Height = 20;
// add an object to the report title band 
Memo = new TfrxMemoView(Band);
Memo->CreateUniqueName();
Memo->Text = "Hello FastReport!";
Memo->Height = 20;
// this object will be stretched according to band’s width 
Memo->Align = baWidth;
// add the masterdata band 
DataBand = new TfrxMasterData(Page);
DataBand->CreateUniqueName();
DataBand->DataSet = frxDBDataset1;
// the Top coordinate should be greater than the previously added band’s top + height
DataBand->Top = 100;
DataBand->Height = 20;
// add an object on master data 
Memo = new TfrxMemoView(DataBand);
Memo->CreateUniqueName();
// connect to data 
Memo->DataSet = frxDBDataset1;
Memo->DataField = "CustNo";
Memo->SetBounds(0, 0, 100, 20);
// adjust the text to the right object’s margin 
Memo->HAlign = haRight;
// show the report 
frxReport1->ShowReport(true);

讓我們解釋一些細節。

必須在報告中使用的所有資料來源都必須新增到資料來源列表中。在我們的情況下,這是使用

frxReport1.DataSets.Add(frxDBDataSet1)

line,否則,報告將不起作用。

對於將內部資料集插入TfrxADOTable到報表中,“資料”頁面是必需的。此類資料集只能放置在“資料”頁面上。

Page.SetDefaults不需要呼叫,因為在這種情況下頁面將具有А4格式,頁邊距為0毫米。SetDefaults設定10mm頁邊距,並採用印表機預設具有的頁面尺寸和對齊方式。

在頁面上新增帶區時,應確保它們不會相互重疊。為此,只需設定«Top»和«Height»座標即可。修改«Left»和«Width»座標毫無用處,因為帶始終具有其所在頁面的寬度(如果是垂直帶,則不正確–您應設定Left和Width屬性,並不在乎頂部和高度)。應該注意的是,樂隊在頁面上的位置順序非常重要。始終以與設計者相同的方式定位樂隊。

物件的座標和大小以畫素為單位設定。因為Left,Top,Width,和Height所有物件的屬性有«擴充套件»型別,你可以指出非整數值。定義了以下常量,用於將畫素轉換為釐米和英寸:

fr01cm = 3.77953;
fr1cm  = 37.7953;
fr01in = 9.6;
fr1in  = 96;

例如,可以將帶子的高度設定為等於5毫米,如下所示:


Band.Height := fr01cm * 5; 
Band.Height := fr1cm * 0.5;

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69995027/viewspace-2771187/,如需轉載,請註明出處,否則將追究法律責任。

相關文章