Delphi 德尔菲模态形式位置

Delphi 德尔菲模态形式位置,delphi,delphi-xe,Delphi,Delphi Xe,所有模态形式显示在屏幕左上方,设置如下 BorderIcons = [biSystemMenu] BorderStyle = bsSingle Position = poOwnerFormCenter 以前它是按设置显示的,但最近我做了一些改变,导致了这个问题 让我进一步解释,以便您能提出适当的解决方案 我的应用程序几乎有50多个表单,我将它们作为CustomerForm.Show/showmodel打开。 所有表单都继承自一个根表单,该根表单具有以下代码以在任务栏上显示图标 pr

所有模态形式显示在屏幕左上方,设置如下

  BorderIcons = [biSystemMenu]
  BorderStyle = bsSingle
  Position = poOwnerFormCenter
以前它是按设置显示的,但最近我做了一些改变,导致了这个问题

让我进一步解释,以便您能提出适当的解决方案

我的应用程序几乎有50多个表单,我将它们作为CustomerForm.Show/showmodel打开。 所有表单都继承自一个根表单,该根表单具有以下代码以在任务栏上显示图标

procedure TBaseForm.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  Params.ExStyle := Params.ExStyle or WS_Ex_AppWindow;
  Params.WndParent := GetDesktopwindow;
end;
有一个问题是,每当从任何窗体打开文件打开或文件保存对话框时,不管它是否是模态窗体,主窗体都会出现在顶部,为了解决这个问题,我制作了一个虚拟主窗体并 put Application.ShowMainForm:=false;在项目文件中,这工作正常,但这启动了屏幕左上角出现的所有模态形式


您能对此提出建议吗?

由于您在所有窗口中使用相同的祖先,您可以添加自己的带有参数Parent:TYourForm的公共函数showmodel


在这种方法中,您可以获得父对象的位置,计算中心,然后将模态窗口移动到其中心。之后,您可以自己调用real ShowModal…

将其添加到主窗体的创建中:

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

Params.WndParent:=GetDesktopwindow在我看来是错误的。如何创建虚拟主窗体?@TOndrej使用Application.CreateFormTfrmDummy,frmDummy;在dpr文件中,没有足够的信息重现您的问题,抱歉。