Delphi 如何防止启动屏幕破坏主窗口定位?

Delphi 如何防止启动屏幕破坏主窗口定位?,delphi,delphi-7,splash-screen,multiple-monitors,Delphi,Delphi 7,Splash Screen,Multiple Monitors,我有一个监控应用程序,可以自动将其主窗口定位在辅助监控器上(如果可用) 我试图添加一个带有备忘录的“启动屏幕”,以显示启动时的进度。我希望启动屏幕在主(默认)监视器上显示10秒钟(在主窗口出现后仍然可见,但启动有控件,因此也可以手动关闭)。初始屏幕在初始化的早期出现,但是当它出现时,我用来将主窗体移动到辅助监视器的代码停止工作。主窗体最终将自己定位在主监视器的左上角。我已经验证了无论是否显示splash表单,都会报告相同的监视器计数和相同的像素尺寸 下面是我用来定位主窗体的代码: if Extr

我有一个监控应用程序,可以自动将其主窗口定位在辅助监控器上(如果可用)

我试图添加一个带有备忘录的“启动屏幕”,以显示启动时的进度。我希望启动屏幕在主(默认)监视器上显示10秒钟(在主窗口出现后仍然可见,但启动有控件,因此也可以手动关闭)。初始屏幕在初始化的早期出现,但是当它出现时,我用来将主窗体移动到辅助监视器的代码停止工作。主窗体最终将自己定位在主监视器的左上角。我已经验证了无论是否显示splash表单,都会报告相同的监视器计数和相同的像素尺寸

下面是我用来定位主窗体的代码:

if ExtraMonitorToUse < screen.monitorcount then  // it is available for use
  with screen.monitors[ExtraMonitorToUse] do // set the main form to top left of selected monitor
  begin
    WriteGenLog(format('Self: original coordinates: L%d T%d <--- screen.monitors: L%d, T%d ',[self.left, self.top, left, top]), true);
    self.left := left;
    self.top := top;
    WriteGenLog(format('Self: new coordinates: L%d T%d  ', [self.left, self.top]), true);
    WriteGenLog(format('Moved form to Monitor %d ', [Monitornum]), true);
  end;
如果ExtraMonitorToUse写日志(格式)('Self:original coordinations:L%d T%d我假设您的启动屏幕代码弄乱了一个或多个变量。例如,在分配给Self.left和Self.top之前将left和top设置为零。直接在
Self.left:=left
行之前打印所有相关变量,并将输出与启动屏幕T进行比较o没有。我在上面编辑添加了一些额外的变量状态,包括启动屏幕和没有启动屏幕。没有区别。确认“self”指的是相同的表单(MainForm)在每种情况下,由于原始位置保持不变。有趣的一点是,主窗体确实在移动。执行代码后,它在主监视器的左上角位置(0,0)处结束,即使它报告自己处于(1920,0)如果表单位置设置可能会产生干扰,则会设计一个干扰最小的pod定位。每当我在表单定位方面遇到问题时,都是由于
position
DefaultMonitor
属性造成的。我创建了自己的表单基类,将
position
设置为
poDesigned
DefaultMonitor
到它的构造函数中的
dmDesktop
begin
  { Create the splash Screen }
  Splash := TSplash.Create(Application);
  { Show the splash Screen }
  Splash.show;
  { Update the splash Screen so that all components on it are
     visible }
  Splash.update;


  Application.Initialize;
  <..... snip .... >
end;
Monitor 0 Primary
Monitor 0 Workarea L0 T0 R1920 B1200
Monitor 0 Workarea L0 T0 R1920 B1200
Monitor 1 Workarea L1920 T0 R2560 B480
Monitor 1 Workarea L1920 T0 R2560 B480
Self: original coordinates: L268 T142 <--- screen.monitors: L1920, T0 
Self: new coordinates: L1920 T0  
Moved form to Monitor 1 
Monitor 0 Primary
Monitor 0 Workarea L0 T0 R1920 B1200
Monitor 0 Workarea L0 T0 R1920 B1200
Monitor 1 Workarea L1920 T0 R2560 B480
Monitor 1 Workarea L1920 T0 R2560 B480
Self: original coordinates: L268 T142 <--- screen.monitors: L1920, T0 
Self: new coordinates: L1920 T0  
Moved form to Monitor 1