加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

表格 – 如何将Delphi表格移到另一表格之前?

发布时间:2020-12-15 09:31:48 所属栏目:大数据 来源:网络整理
导读:我有一个应用程序,它总是同时显示至少两个表单. 一般来说,我在主表单的子表单中有一个作业列表,主表单上显示相关详细信息.可以使用ShowModal管理其他详细信息. 当前的问题是用户最近要求可以将主表单拖到作业列表的前面. 据我所知,因为作业列表表格是在主表
我有一个应用程序,它总是同时显示至少两个表单.

一般来说,我在主表单的子表单中有一个作业列表,主表单上显示相关详细信息.可以使用ShowModal管理其他详细信息.

当前的问题是用户最近要求可以将主表单拖到作业列表的前面.

据我所知,因为作业列表表格是在主表格之后创建的,并从主表格调用显示,所以它获得“前”位置.

有没有办法可以在运行时更改它,即我可以将Active窗体设置为在前面吗?

解决方法

注意:在本答复的其余部分中,所拥有的术语采用 Windows documentation使用的含义.这与VCL中相同术语的含义不同.

发生的事情是您的工作列表窗口是顶级拥有的窗口.

Being owned places several constraints on a window.

  • An owned window is always above its owner in the z-order.
  • The system automatically destroys an owned window when its owner is destroyed.
  • An owned window is hidden when its owner is minimized.

如果您希望您的作业列表窗口能够位于z顺序中的主窗口下方,则它不能由主窗口拥有.您可以按如下方式实现此目的:

class TJobListForm = class(...)
protected
  procedure CreateParams(var Params: TCreateParams); override;
...
procedure TJobListForm.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.WndParent := Application.Handle;
end;

这使得作业列表窗口成为隐藏应用程序窗口所拥有的顶级窗口.或者像这样:

procedure TJobListForm.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.WndParent := 0;
end;

这使得作业列表窗口成为无主的顶级窗口.因此,它现在在任务栏中收到一个按钮.

进行此类更改将对您的应用程序产生深远影响.上面列表中的第二和第三个要点是明显的影响.最小化窗口时的行为以及它们与任务栏的交互也会受到影响.我只是在这里划伤了表面.您可能会发现,使您的工作列表窗口不再由主窗口拥有会对您的程序产生很大影响.你会发现Windows在拥有窗口的幕后为你做了很多工作.如果切换到无主窗口,则可能需要重现其中一些工作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读