我有一个Delphi 7应用程序,它有两个文档视图(例如,所见即所得HTML编辑可能有WYSIWYG视图和源视图 - 而不是我的真实应用程序)。 它们可以在单独的窗口中打开,也可以停靠在主窗口中的选项卡中。

如果我从其中一个单独的表单打开模式对话框,则主表单将显示在前面,并在Windows任务栏中显示为选定的窗口。 假设主窗体是WYSIWYG视图,并且源视图被激活。 您转到源视图中的特定点并插入图像标记。 将出现一个对话框,允许您选择并输入图像所需的属性。 如果WYSIWYG视图和源视图重叠,则WYSIWYG视图将显示在前面,并且隐藏源视图。 一旦对话框被解除,源视图就会重新出现。

我已经尝试将所有者和ParentWindow属性设置为与其相关的表单:

dialog := TDialogForm.Create( parentForm );
dialog.ParentWindow := parentForm.Handle;

我该如何解决这个问题? 我还应该尝试什么?

鉴于人们似乎对我的例子感到磕磕绊绊,也许我可以尝试一个更好的例子:一个文本编辑器,允许你同时打开多个文件。 您打开的文件位于选项卡(如Delphi IDE中)或其自己的窗口中。 假设用户调出拼写检查对话框或查找对话框。 会发生什么,如果文件正在其自己的窗口中进行编辑,则在显示模式对话框时,该窗口将以z顺序发送到主窗体下方; 关闭对话框后,它将返回到原始的z顺序。

注意 :如果您正在使用Delphi 7并寻找此问题的解决方案,请在页面下方查看我的答案,看看我最终做了什么。

===============>>#1 票数:5 已采纳

我会使用这段代码......(基本上是Lars所说的)

dialog := TDialogForm.Create( parentForm );
dialog.PopupParent := parentForm;
dialog.PopupMode   := pmExplicit; 
dialog.ShowModal();

===============>>#2 票数:3

我最终找到了使用Google网上论坛的答案 简而言之,所有模态对话框都需要添加以下内容:

 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中的答案。

===============>>#3 票数:1

是使用ShowModal显示对话框还是只显示? 您应该将PopupMode属性设置为对话框的正确性。 pmAuto可能是你最好的选择。 另请参阅是否需要设置PopupParent属性。

===============>>#4 票数:0

首先,我并不完全确定我会遵循,您可能需要提供一些额外的细节来帮助我们了解正在发生的事情以及问题所在。 我想我不确定我到底知道你要完成什么以及问题是什么。

其次,您不需要设置对话框的父级,因为这实际上是对Create(传递父级)的调用。 你描述的对话听起来好像可以使用一些“重新思考”,说实话。 此对话框是否为源窗口的子项或WYSIWYG窗口输入图像的属性?

===============>>#5 票数:0

我不确定我完全理解你的目标是什么,但这里有一些我可以建议你可以试试的东西......

  1. 这种行为在不同版本的Delphi之间发生变化。 我建议这是因为他们为了支持Delphi 2007中的Windows Vista而跳槽。
  2. 如果您使用的是Delphi 2007,请尝试从项目源文件中删除设置Application.MainFormOnTaskBar布尔变量的行。
  3. 删除后,您应该能够使用各种Form的BringToFront / SendToBack方法来实现您所追求的Z顺序。

我怀疑你发现的内容已在此链接上讨论过当然,我可能完全错过了你的观点,所以请提前道歉!

  ask by garethm translate from so

未解决问题?本站智能推荐: