对话框窗口
# 对话框窗口
与通常的报表设计页面一样,您可以在报表中使用对话表单。使用设计器工具栏中的新对话框
按钮在通常的报表设计器中创建对话表单:该按钮为报表添加了一个新的对话页面选项卡。切换到对话框页面选项卡时,设计器工作区将更改为显示表单,对象工具栏将更改为显示可以放置在表单上的控件对象:

# 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
,则报表停止运行而不构建预览。