创建后可以是模态的表单

时间:2014-05-30 14:07:04

标签: delphi

我有一个PopForm,我想在任何情况下都留在MainForm。 案例是:

PopForm.ShowModalPopForm.Show

虽然ShowModal完全正常,但需要使用Show方法与MainForm进行互动,以便进行“拖放”操作。的东西。

PopForm的主要职责是将数据从某些文件导入MainForm上的数据集。有两种方法:拖放具体数据(在显示模式下选择行)和从PopForm传输所有数据(在ShowModal模式下)。 PopForm中的所有数据都存储在ClientDataSet之类的内容中。我开发了类似ClientDataSet's的方法:首先,Eof,FieldByName,Next等,并将它们实现为PopForm

关闭PopForm后(在设置ModalResult之后),调用过程使用while not PopForm.eof do PopForm.Next...将数据导入MainForm's数据集或任何用户程序员方法。

为了显示一些进展,我曾使用PopForm方法重新创建Show,并在PopForm上方显示进度表单,同时在调用过程中进行循环。之后 - PopForm已关闭。

这很好,但唯一的问题是关于Show方法 - 我需要PopForm一直超过MainForm。在大多数情况下,它是,但有一些应用程序,不知何故不遵循这一规则。我尝试使用PopupParent & PopupMode属性,但他们让popForm在任何作业上再次重新创建(而且我刚发现 - 你需要在节目中指定一个CustomForm然后 - 没关系,因为使用常见的TForm.Close方法,它不会隐藏任何方式)

如果在FormClose方法上不需要Nil PopupParent,那就不会有任何问题。另一个例程是分配

...FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
  ...
end;

如果Assigned(PopForm)返回false,它会有效,但会返回true

如果有任何案例可以发现表格是否已释放 - 这可能有所帮助。你觉得怎么样?

1 个答案:

答案 0 :(得分:0)

如果您将表单样式设置为fsStayOnTop,则表单将始终位于顶部,而您还有另一个具有相同属性的表单。在这种情况下,活跃的一个将位于顶部。

至于从用于导入数据的PopForm移动数据,您可以采用类似于创建自定义对话框的方法。 自定义对话框通常设计如下: 你有对话框类,其中包含拨号设置的字段(更改对话框看起来像锄头),甚至是对话框输出的字段(选择的FileMame / s等)。 在这个类中有一个对话框表单类,它实际上是一个模态形式。此对话框表单使用其OnClose事件在关闭之前自动将必要信息提供给Dialog输出字段。