Delphi 一种在创建后可以是模态的表单
我有一个Delphi 一种在创建后可以是模态的表单,delphi,Delphi,我有一个PopForm,无论如何我都想留在MainForm上。 个案包括: PopForm.showmodel和PopForm.Show 虽然showmodel完全可以正常工作,但是需要使用Show方法与MainForm进行交互,以执行“拖放”操作 PopForm的主要职责是将一些文件中的数据导入MainForm上的数据集。有两种方法:拖放具体数据(在显示模式下选中的行)和从PopForm(在显示模式下)传输所有数据。PopForm中的所有数据都存储在类似于ClientDataSet的内容中。我
PopForm
,无论如何我都想留在MainForm
上。
个案包括:
PopForm.showmodel
和PopForm.Show
虽然showmodel
完全可以正常工作,但是需要使用Show
方法与MainForm
进行交互,以执行“拖放”操作
PopForm
的主要职责是将一些文件中的数据导入MainForm
上的数据集。有两种方法:拖放具体数据(在显示模式下选中的行)和从PopForm
(在显示模式下)传输所有数据。PopForm
中的所有数据都存储在类似于ClientDataSet
的内容中。我开发了类似于ClientDataSet
的方法:First、Eof、FieldByName、Next等,并将它们实现到PopForm
中
关闭PopForm
后(设置ModalResult后),调用过程使用而不是PopForm.eof do PopForm.Next…
将数据导入MainForm的
数据集或任何用户编程方法
为了显示一些进度,我使用Show
方法重新创建PopForm
,并在调用过程中进行循环时在PopForm
上方显示进度表。之后-PopForm
关闭
这很好,但唯一的问题是关于Show
方法-我需要PopForm
始终处于MainForm
之上。在大多数情况下是这样的,但也有一些应用程序不遵循这一规则。我曾尝试使用popuparent&PopupMode
属性,但它们使popForm
在任何赋值时都可以重新创建(正如我刚刚发现的那样,您需要在显示时赋值一个自定义表单,然后在关闭时将其置零,因为使用commonTForm.close
方法,它不会隐藏任何方法)
如果在FormClose方法上不需要Nil popupprent,那么这将不会有任何问题。另一个例行程序是分配
...FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
...
end;
如果Assigned(PopForm)
returnfalse
,它将工作,但返回true
如果有任何情况可以发现表单是否被释放-这可能会有所帮助。您觉得怎么样?如果您将表单样式设置为fsStayOnTop,则除非存在具有相同属性的其他表单,否则表单将始终保持在顶部。在这种情况下,它们中的活动一个将位于顶部 至于从用于导入数据的PopForm中移动数据,可以采用与创建自定义对话框类似的方法。 自定义对话框的设计通常如下所示: 您有一个dialog类,它包含拨号设置字段(更改对话框外观),甚至还有一个对话框输出字段(所选文件名等)。
在这个类中有一个对话框窗体类,本质上是一个模态窗体。此对话框窗体使用其OnClose事件在关闭前自动将必要的信息输入到对话框输出字段。这已经被许多人讨论过很多次,答案是没有真正的100%方法保证它始终位于所有其他窗口之上。如果另一个应用程序也尝试相同的操作,该怎么办?谁说哪个应用程序应该优先?事实是,即使使用最好的方法保持领先,您仍然面临着与另一个应用程序发生冲突的机会。@Jerry-我认为在这个场景中没有stayontop表单。然而,我认为我不理解这个问题,也不理解这个问题。@Sertac事实上,这似乎是多个问题,这是一个突出的问题给我<代码>我需要PopForm一直在MainForm上。在大多数情况下是这样的,但也有一些应用程序不遵循这一规则@notricky-不如用一些复制问题的短代码,而不是我们试图从问题的描述中理解问题。检查它们是否都具有相同的mainformontaskbar设置。我对您的理解是否像您建议创建一个保存整个数据(对话框的数据集)的自定义类一样所有的fetchig步骤都会用到这个类,而Dialog类是这个自定义类中的一个属性?是的,我已经添加了fsStayOnTop,这似乎很有效。而且是这么早。首先我得到一个错误——我开始记得问题是什么——很难调试,因为顶部窗口是调试器的顶部;))