如何防止闪屏破坏主窗口定位?

时间:2013-12-25 19:09:46

标签: delphi delphi-7 splash-screen multiple-monitors

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

我正在尝试使用备忘录添加“启动画面”以显示启动时的进度。我希望启动画面在主(默认)监视器上显示10秒钟(在主窗口出现后仍然可见,但是启动画面有控制因此也可以手动关闭)。启动屏幕在初始化的早期就出现了预期,但是当它出现时,我用来将主窗体移动到辅助监视器的代码停止工作。主窗体最终定位在主监视器的左上方。我已经确认报告了是否显示了相同的显示器数量和相同的像素尺寸。

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

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;

以下是我创建启动画面的方法:(在应用程序的DPR文件中)

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;

如果我在前面的代码块中注释掉“Application.Initialize”上面的行,则主窗体定位可以正常工作。 为什么创建Splash表单会导致主窗体的定位停止工作?

编辑 - 来自日志文件的更多信息......

以下是启用启动画面的日志结果:

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 

就所报告的职位而言,一切都是一样的。但是,“自我”的地位变化是行不通的。它也不会与Splash屏幕混淆,因为闪屏的位置也保持在主显示器的中心位置。

0 个答案:

没有答案