我有一个Delphi 7应用程序,它有两个文档视图(例如WYSIWYG HTML编辑可能有WYSIWYG视图和源视图 - 而不是我的实际应用程序)。它们可以在单独的窗口中打开,也可以停靠在主窗口的选项卡中。
如果我从其中一个单独的表单打开模式对话框,则主表单将显示在前面,并在Windows任务栏中显示为所选窗口。假设主窗体是WYSIWYG视图,并且源视图被激活。您转到源视图中的特定点并插入图像标记。将出现一个对话框,允许您选择并输入图像所需的属性。如果WYSIWYG视图和源视图重叠,则WYSIWYG视图将显示在前面,并且隐藏源视图。一旦对话框被解除,源视图就会重新出现。
我已尝试将所有者和ParentWindow属性设置为与其相关的表单:
dialog := TDialogForm.Create( parentForm );
dialog.ParentWindow := parentForm.Handle;
如何解决此问题?我还应该尝试什么?
鉴于人们似乎对我的例子感到磕磕绊绊,也许我可以尝试一个更好的例子:一个文本编辑器,允许你同时打开多个文件。您打开的文件位于选项卡(如Delphi IDE中)或其自己的窗口中。假设用户调出拼写检查对话框或查找对话框。会发生什么,如果文件正在其自己的窗口中进行编辑,则在显示模式对话框时,该窗口将以z顺序发送到主窗体下方;关闭对话框后,它将返回到原始的z顺序。
注意:如果您正在使用Delphi 7并寻找此问题的解决方案,请在页面下方查看我的答案,看看我最终做了什么。
答案 0 :(得分:5)
我会使用这段代码......(基本上是Lars所说的)
dialog := TDialogForm.Create( parentForm );
dialog.PopupParent := parentForm;
dialog.PopupMode := pmExplicit;
dialog.ShowModal();
答案 1 :(得分:3)
我最终使用Google网上论坛找到了answer。简而言之,所有模态对话框都需要添加以下内容:
procedure TDialogForm.CreateParams(var Params: TCreateParams); begin inherited; Params.Style := Params.Style or WS_POPUP; Params.WndParent := (Owner as TWinControl).Handle; end;
我猜这相当于Lars'和Marius在Delphi 7中的答案。
答案 2 :(得分:1)
是使用ShowModal显示对话框还是仅显示?您应该将PopupMode属性设置为对话框的正确性。 pmAuto可能是你最好的选择。另请参阅是否需要设置PopupParent属性。
答案 3 :(得分:0)
首先,我并不完全确定我会遵循,您可能需要提供一些其他详细信息,以帮助我们了解正在发生的事情以及问题所在。我想我不确定我到底知道你要完成什么以及问题是什么。
其次,您不需要设置对话框的父级,因为这实际上是对Create(传递父级)的调用所发生的事情。你描述的对话听起来好像可以使用一些“重新思考”,说实话。此对话框是否为源窗口的子项或WYSIWYG窗口输入图像的属性?
答案 4 :(得分:0)
我不确定我是否完全明白你的目标是什么,但我可以建议你尝试一些事情......
我怀疑你发现的内容已在this link上讨论过 当然,我可能完全错过了你的观点,所以提前道歉!