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