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