我有一个PopForm
,我想在任何情况下都留在MainForm
。
案例是:
PopForm.ShowModal
和PopForm.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
。
如果有任何案例可以发现表格是否已释放 - 这可能有所帮助。你觉得怎么样?
答案 0 :(得分:0)
如果您将表单样式设置为fsStayOnTop,则表单将始终位于顶部,而您还有另一个具有相同属性的表单。在这种情况下,活跃的一个将位于顶部。
至于从用于导入数据的PopForm移动数据,您可以采用类似于创建自定义对话框的方法。 自定义对话框通常设计如下: 你有对话框类,其中包含拨号设置的字段(更改对话框看起来像锄头),甚至是对话框输出的字段(选择的FileMame / s等)。 在这个类中有一个对话框表单类,它实际上是一个模态形式。此对话框表单使用其OnClose事件在关闭之前自动将必要信息提供给Dialog输出字段。