德尔福模态形式位置

时间:2011-08-30 11:35:06

标签: delphi delphi-xe

所有模态窗体都显示在屏幕的左上角,而设置为

  BorderIcons = [biSystemMenu]
  BorderStyle = bsSingle
  Position = poOwnerFormCenter

之前它曾经按照设置显示,但最近我做了一些导致问题的更改

让我进一步解释,以便建议适当的解决方案。

我的应用程序有近50种以上的表单,我将它们打开为CustomerForm.Show/ShowModal。 所有表单都是继承来自一个根表单,其中包含以下代码以在任务栏上显示图标

procedure TBaseForm.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  Params.ExStyle := Params.ExStyle or WS_Ex_AppWindow;
  Params.WndParent := GetDesktopwindow;
end;

有一个问题是,无论何时从任何表单打开文件打开或文件保存对话框(无论是否为模态形式),主表单都在顶部,为了解决这个问题,我制作了一个虚拟主表单和 将Application.ShowMainForm := false;放在项目文件中,这样可以正常工作,但这会启动所有模态窗体出现在屏幕的左上角。

你能否就此提出建议?

2 个答案:

答案 0 :(得分:0)

当您为所有窗口使用相同的祖先时,可以使用参数Parent:TYourForm添加自己的公共函数ShowModal。

在此方法中,您将获得父级的位置,计算中心,并将模态窗口移动到其中心。之后,你可以用自己的方式调用真正的ShowModal ......

答案 1 :(得分:0)

将其添加到主表单的创建中:

SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or
  WS_EX_TOPMOST);