關於窗口置屏的那個坑

在開發多屏應用程序的時候,常常須要把某個窗口置到某個屏上的某個位置。如下是一個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程序

相關文章
相關標籤/搜索