关于窗口置屏的那个坑

在开发多屏应用程序的时候,常常须要把某个窗口置到某个屏上的某个位置。如下是一个Delphi写的置屏方法:code

procedure ShowInMonitor(Sender: TObject; AIndex: Integer; ALeft: Integer = 0; ATop: Integer = 0);
var
  lM: TMonitor;
begin
  if Sender is TControl then
  begin
    if AIndex > Screen.MonitorCount - 1 then
    begin
      AIndex := 0;
    end;
    lM := Screen.Monitors[AIndex];
    (Sender as TControl).Left := lM.Left + ALeft;
    (Sender as TControl).Top := lM.Top + ATop;
  end;
end;

Sender是须要置屏的窗口;AIndex是置屏的目标屏号,从0开始;ALeft是水平偏移量,ATop是垂直偏移量,默认均为0,即在目标屏的左上角。开发

一般状况下,使用该方法对当前窗口置屏,是没有任何问题的。it

可是,对于动态建立的窗口,极可能就会发现不正常。今天一上午都在弄这货,始终没搞定,到下午忽然发现症结,而后一会儿就行了,在此作个记录备忘。class

问题很简单:是调用顺序的问题。正确的调用顺序应该是Show->ShowInMonitor程序

相关文章
相关标签/搜索