在开发多屏应用程序的时候,常常须要把某个窗口置到某个屏上的某个位置。如下是一个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
。程序