翻譯|使用教程|編輯:楊鵬連|2021-04-15 11:45:07.813|閱讀 218 次
概述:本文詳細介紹了如何在交互式報表中,定義對鼠標單擊預(yù)覽窗口中任何報表對象的反應(yīng)。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
FastReport VCL是用于Delphi,C ++ Builder,RAD Studio和Lazarus的報告和文檔創(chuàng)建VCL庫。它提供了可視化模板設(shè)計器,可以訪問最受歡迎的數(shù)據(jù)源,報告引擎,預(yù)覽,將過濾器導(dǎo)出為30多種格式,并可以部署到云,Web,電子郵件和打印中。
近日,F(xiàn)astReport VCL更新至v6.9,在新版本中,在PDF導(dǎo)出中增加了對以下對象的交互式表單支持:文本,復(fù)選框和圖片。能夠通過InteractiveFormsFontSubset屬性將所需的字形僅包含在交互式形式中。同時修復(fù)了多個Bug問題。歡迎下載體驗。(點擊下方按鈕下載)
在交互式報表中,可以定義對鼠標單擊預(yù)覽窗口中任何報表對象的反應(yīng)。例如,用戶可以單擊數(shù)據(jù)行,從而運行包含所選行的詳細數(shù)據(jù)的新報告。
任何報告都可以互動。為此,您只需要創(chuàng)建一個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處理程序中,您可以執(zhí)行以下操作:
同樣,可以為點擊定義不同的反應(yīng)。例如,它可以運行新報告。有必要注意以下幾點。一個TfrxReport組件只能在預(yù)覽窗口中顯示一個報告。這就是為什么應(yīng)該在單獨的TfrxReport對象中或在同一對象中運行報表,但是必須刪除當前報表的原因。
為了向最終用戶提供有關(guān)可點擊對象的提示,我們可以在鼠標光標經(jīng)過預(yù)覽窗口中的可點擊對象時對其進行修改。為此,請在報表設(shè)計器中選擇所需的對象,并將其cursor屬性設(shè)置為crDefault以外的其他值。
另一個細節(jié)涉及定義可點擊對象。在簡單的報表中,可以在對象的名稱或其內(nèi)容中定義它。但是,這并不總是在更復(fù)雜的情況下執(zhí)行。例如,應(yīng)在選定的數(shù)據(jù)行中創(chuàng)建詳細的報告。用戶單擊內(nèi)容為“ 12”的?Memo1?對象。該對象指的是什么數(shù)據(jù)線?這就是為什么您應(yīng)該知道主鍵,它清楚地標識了這一行的原因。FastReport可以為每個報表的對象分配一個字符串,其中包含任何數(shù)據(jù)(在本例中為主鍵的數(shù)據(jù))。此字符串存儲在TagStr屬性中。
讓我們通過一個報告示例來說明此過程,該示例包含在FastReportDemo.exe-“簡單列表”演示中。這是公司的客戶列表,其中包含諸如“客戶名稱”,“地址”,“聯(lián)系人”等數(shù)據(jù)。數(shù)據(jù)源是DBDEMOS演示數(shù)據(jù)庫中的“ Customer.db”表。該表具有一個主鍵,即?CustNo?字段,該字段未在報告中顯示。我們的任務(wù)是通過單擊完成的報告中的任何對象來確定其引用的記錄,這意味著獲取主鍵的值。為此,只需TagStr在“主數(shù)據(jù)”區(qū)域中的所有對象的屬性中輸入以下值:
[Customers."CustNo"]
在報表的構(gòu)建過程中,TagStr屬性的內(nèi)容的計算方法與文本對象的內(nèi)容計算方法相同;這意味著將用變量的值代替所有變量。在這種特殊情況下,變量是括在方括號中的變量。這就是為什么TagStr在創(chuàng)建報表后,“ 1005”,“ 2112”等類型的行將包含在主數(shù)據(jù)上的對象的屬性中的原因。從字符串到整數(shù)的簡單轉(zhuǎn)換將為我們提供主鍵的值,通過它可以找到所需的記錄。
如果主鍵是復(fù)合鍵(即它包含多個字段),則TagStr屬性的內(nèi)容可以如下:
[Table1."Field1"];[Table1."Field2"]
構(gòu)造報告后,該TagStr屬性包含“ 1000; 1”類型的值,從中獲取鍵的值也不難。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@ke049m.cn
文章轉(zhuǎn)載自: