對話方塊視窗
# 對話方塊視窗
與通常的報表設計頁面一樣,您可以在報表中使用對話表單。使用設計器工具欄中的新對話方塊
按鈕在通常的報表設計器中建立對話表單:該按鈕為報表新增了一個新的對話頁面選項卡。切換到對話方塊頁面選項卡時,設計器工作區將更改為顯示錶單,對像工具欄將更改為顯示可以放置在表單上的控制元件對像:
# 1. 控制元件
以下是可以使用在對話方塊中的控制元件列表。
圖示 | 名稱 | 描述 |
---|---|---|
TfrxLabelControl | 文字控制元件,在對話表格上顯示固定文字 | |
TfrxEditControl | 編輯控制元件,使用鍵盤輸入文字 | |
TfrxMemoControl | 多行編輯控制元件,使用鍵盤輸入多行文字 | |
TfrxButtonControl | 按鈕控制元件,代表一個按鈕 | |
TfrxCheckBoxControl | 覈取方塊控制元件,代表一個標誌,有兩個狀態:啟用或禁用; 有一個相鄰的標籤 | |
TfrxRadioButtonControl | 單選按鈕控制元件,代表一個單選按鈕,如表單上使用了此控制元件則必須有多個 | |
TfrxListBoxControl | 列表控制元件,表示可以從中選擇一個專案的列表 | |
TfrxComboBoxControl | 下拉選擇列表控制元件,表示可從中選擇一個專案的下拉選單 | |
TfrxPanelControl | 面板控制元件,表示可以包含其他對象的面板 | |
TfrxGroupBoxControl | 分組框控制元件,表示可以包含其他對象的標記框 | |
TfrxPageControl | 標籤頁面控制元件,表示多個使用標籤進行切換的頁面 | |
TfrxDateEditControl | 日期選擇控制元件,表示具有日期條目的下拉日曆的欄位 | |
TfrxImageControl | 影象控制元件,表示BMP ,ICO ,WMF 或EMF 格式的圖片 | |
TfrxBevelControl | 邊框控制元件,在表單上顯示行和框架的控制元件 | |
TfrxBitBtnControl | 圖片按鈕控制元件,表示包含圖片的按鈕 | |
TfrxSpeedButtonControl | 快速選擇按鈕控制元件,表示包含圖片的速度按鈕 | |
TfrxMaskEditControl | 掩碼編輯控制元件,使用鍵盤輸入文字並使用掩碼遮蓋的編輯框 | |
TfrxCheckListBoxControl | 覈取方塊選擇控制元件,表示通過覈取方塊選擇的專案列表 |
關於控制元件的屬性、事件與方法資訊請參考FastReport元件幫助文件。
# 2. "Hello World!"報表
在此示例中,我們將建立一個報表,在建立預覽之前,使用對話方塊視窗顯示問候視窗。
打開設計器,並在報表中新增一個對話方塊。在表單上放置TfrxLabelControl
和TfrxButtonControl
對象。
設定對像屬性:
Label:
Caption = 'Hello, World!'
Button:
Caption = 'OK'
Default = True
ModalResult = mrOk
2
3
4
5
6
7
為表單設定BorderStyle = bsDialog
屬性。控制元件和表單都具有與控制元件相同的屬性集。
完成對話方塊設計后,返回到報表設計Page1選項卡,並在頁面上放置包含問候語的文字對象。
預覽報表,您將看到對話方塊:
單擊[OK]
按鈕后,對話方塊將關閉,並構建並顯示報表。如果通過單擊系統功能表[X]
按鈕關閉對話方塊,則不會構建報表。 FastReport的工作方式如下:如果報表中有對話表單,則僅在使用ModalResult = mrOk
關閉每個對話方塊后構建報表,即在此示例中單擊[ОК]
按鈕。這就是為什麼按鈕的ModalResult
屬性必須設定為mrOk
。
# 3. 輸入參數並將參數傳遞至報表
接下來讓這個例子做的複雜一些,以展示如何將對話中輸入的值傳輸到報表中。修改對話方塊如下:
在報表Page1
上放置一個包含此文字的文字對象,並將其AutoWidth
設定為True
。在文字對像中輸入的內容如下:
您輸入的內容為:
[Edit1.Text]
2
預覽報表並確保在報表中成功顯示輸入的文字。可以以類似的方式訪問對話中的其他對象。由於每個對象的名稱在整個報表中都是唯一的,因此可以在同一報表中的任何位置使用。
# 4. 與控制元件互動
通過使用指令碼,複雜的邏輯可以合併到對話的操作中。讓我們用一個簡單的例子來說明這一點:修改表單如下:
雙擊CheckBox
對像以建立OnClick
事件處理程式並輸入以下指令碼:
procedure CheckBox1OnClick(Sender: TfrxComponent);
begin
Button1.Enabled := not CheckBox1.Checked;
end;
2
3
4
在運行報表時,按鈕會響應覈取方塊的狀態。
# 5. 幾種對話方塊的形式
讓我們看看有兩個對話的報表是如何工作的。建立包含兩個對話方塊和一個設計頁面的報表:
將[確認]
和[取消]
按鈕的ModalResult
屬性分別設定為mrOk
和mrCancel
。
現在運行報表。首先,使用者將被要求回答第一個對話(姓名,是否有孩子)的問題,然後點選[確認]
,打開第二個對話(孩子的名字)。在第二個對話方塊中單擊[確認]
后,將構建報表。 FastReport以這種方式處理多個對話:對話以其建立順序顯示; 每個對話方塊僅在使用ModalResult = mrOk
關閉前一個對話方塊后顯示(在本例中,單擊每個[確認]
按鈕)。如果使用[取消]
按鈕或系統功能表[Х]
按鈕關閉任何對話方塊,則會阻止構建報表。
# 6. 管理對話方塊
在前面的示例中,無論是否勾選是否有孩子?
,都會顯示第二個對話方塊。讓我們展示如何在未選中此標誌時隱藏第二個對話方塊。在第一個對話方塊上為[確認]
按鈕建立一個OnClick
處理程式(雙擊按鈕建立處理程式):
procedure Button1OnClick(Sender: TfrxComponent);
begin
DialogPage2.Visible := CheckBox1.Checked;
end;
2
3
4
如果未選中該選框,則此程式碼隱藏第二個對話方塊(DialogPage2)。預覽報表以檢視其是否正常工作。
管理表單的另一種方法是使用OnRunDialogs
報表事件。要建立此事件處理程式,請在報表樹或對像檢查器中選擇報表對象,然後切換到對像檢查器中的事件選項卡。雙擊OnRunDialogs
事件以建立處理程式:
在處理程式中編寫以下程式碼:
procedure frxReport1OnRunDialogs(var Result: Boolean);
begin
Result := DialogPage1.ShowModal = mrOk;
if Result then
begin
if CheckBox1.Checked then
Result := DialogPage2.ShowModal = mrOk;
end;
end;
2
3
4
5
6
7
8
9
處理程式的工作方式如下:顯示第一個對話方塊:如果通過[確認]
按鈕關閉,則檢視CheckBox1
的狀態:如果此狀態為Checked
,則顯示第二個對話方塊:如果第二個對話方塊通過[確認]
按鈕關閉則將Result
設定為True
。如果處理程式返回Result=True
然後構建預覽;如果Result=False
,則報表停止運行而不構建預覽。