FastReport VCL程式設計師手冊:互動式報表

roffey發表於2021-04-22

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

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

【慧都網】免費下載 FastReport VCL

在互動式報表中,可以定義對滑鼠單擊預覽視窗中任何報表物件的反應。例如,使用者可以單擊資料行,從而執行包含所選行的詳細資料的新報告。

任何報告都可以互動。為此,您只需要建立一個TfrxReport.OnClickObject事件處理程式。以下是此處理程式的程式碼示例:

Pascal:

procedure TForm1.frxReport1ClickObject(Page: TfrxPage; View: TfrxView;
  Button: TMouseButton; Shift: TShiftState; var Modified: Boolean);
begin
  if View.Name = 'Memo1' then
    ShowMessage('Memo1 contents:' + #13#10 + TfrxMemoView(View).Text);
  if View.Name = 'Memo2' then
  begin
    TfrxMemoView(View).Text := InputBox('Edit', 'Edit Memo2 text:', TfrxMemoView(View).Text);
    Modified := True;
  end;
end;

C ++:

void __fastcall TForm1::frxReport1ClickObject(TfrxView *Sender,
      TMouseButton Button, TShiftState Shift, bool &Modified)
{
  TfrxMemoView * Memo;
  if(Memo =  dynamic_cast <TfrxMemoView *> (Sender))
  {
    if(Memo->Name == "Memo1")
      ShowMessage("Memo1 contents:\n\r" + Memo->Text);
    if(Memo->Name == "Memo2")
    {
      Memo->Text = InputBox("Edit", "Edit Memo2 text:", Memo->Text);
       Modified = true;
    }
  }
}

在OnClickObject處理程式中,您可以執行以下操作:

  • 修改傳遞給處理程式的物件或頁面的內容(因此,應指定“ Modified”標誌,以便將修改內容考慮在內);
  • 呼叫TfrxReport.PrepareReport用於重建/重建報告的方法。

在此示例中,單擊名稱為“ Memo1”的物件將顯示一條包含該物件內容的訊息。單擊《備忘錄2》時,會顯示一個對話方塊,可以在此修改該物件的內容。將«Modified»標記設定為«True»可以保留和顯示更改。

同樣,可以為點選定義不同的反應。例如,它可以執行新報告。有必要注意以下幾點。一個TfrxReport元件只能在預覽視窗中顯示一個報告。這就是為什麼應該在單獨的TfrxReport物件中或在同一物件中執行報表,但是必須刪除當前報表的原因。

為了向終端使用者提供有關可點選物件的提示,我們可以在滑鼠游標經過預覽視窗中的可點選物件時對其進行修改。為此,請在報表設計器中選擇所需的物件,並將其cursor屬性設定為crDefault以外的其他值。

另一個細節涉及定義可點選物件。在簡單的報表中,可以在物件的名稱或其內容中定義它。但是,這並不總是在更復雜的情況下執行。例如,應在選定的資料行中建立詳細的報告。使用者單擊內容為“ 12”的«Memo1»物件。該物件指的是什麼資料線?這就是為什麼您應該知道主鍵,它清楚地標識了這一行的原因。FastReport可以為每個報表的物件分配一個字串,其中包含任何資料(在本例中為主鍵的資料)。此字串儲存在TagStr屬性中。

讓我們透過一個報告示例來說明此過程,該示例包含在FastReportDemo.exe-“簡單列表”演示中。這是公司的客戶列表,其中包含諸如“客戶名稱”,“地址”,“聯絡人”等資料。資料來源是DBDEMOS演示資料庫中的“ Customer.db”表。該表具有一個主鍵,即«CustNo»欄位,該欄位未在報告中顯示。我們的任務是透過單擊完成的報告中的任何物件來確定其引用的記錄,這意味著獲取主鍵的值。為此,只需TagStr在“主資料”區域中的所有物件的屬性中輸入以下值:

[Customers."CustNo"]

在報表的構建過程中,TagStr屬性的內容的計算方法與文字物件的內容計算方法相同;這意味著將用變數的值代替所有變數。在這種特殊情況下,變數是括在方括號中的變數。這就是為什麼TagStr在建立報表後,“ 1005”,“ 2112”等型別的行將包含在主資料上的物件的屬性中的原因。從字串到整數的簡單轉換將為我們提供主鍵的值,透過它可以找到所需的記錄。

如果主鍵是複合鍵(即它包含多個欄位),則TagStr屬性的內容可以如下:

[Table1."Field1"];[Table1."Field2"]

構造報告後,該TagStr屬性包含“ 1000; 1”型別的值,從中獲取鍵的值也不難。


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

相關文章