从其它平台迁移而来
在开发多屏应用程序的时候,经常需要把某个窗口置到某个屏上的某个位置。以下是一个Delphi
写的置屏方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
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
,即在目标屏的左上角。
通常情况下,使用该方法对当前窗口置屏,是没有任何问题的。
但是,对于动态创建的窗口,很可能就会发现不正常。今天一上午都在弄这货,始终没搞定,到下午突然发现症结,然后一下子就好了,在此做个记录备忘。
问题很简单:是调用顺序的问题。正确的调用顺序应该是Show
->ShowInMonitor
。