// Die Funktion "SystemParametersInfo(SPI_GETWORKAREA, ...)" bezieht
// sich (zumindest bei meiner Delphi-Version) immer nur auf den
// primären Bildschirm. Deshalb hier die Funktion "Workarea", welche
// auch bei sekundären Bildschirmen funktioniert.
// HINWEIS: Werden primärer und sekundärer Schirm getauscht,
// kommt es im sekundären Schirm zu negativen Werten.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
private
{ Private-Deklarationen }
public
procedure OnPosChange(var aMsg: TMessage); message WM_WINDOWPOSCHANGED;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
uses MultiMon;
function Workarea(F: TForm; out N: Cardinal): TRect;
var
H: HMonitor;
I: TMonitorInfoW;
begin
I.cbSize := SizeOf(TMonitorInfoW);
H := MultiMon.MonitorFromWindow(F.handle, MONITOR_DEFAULTTONEAREST);
MultiMon.GetMonitorInfoW(H, @I);
N := I.dwFlags;
result := I.rcWork;
end;
// zum Testen
procedure TForm1.OnPosChange(var aMsg: TMessage);
var
rct: TRect;
n: cardinal;
s: string;
begin
inherited;
rct := Workarea(Self, n);
if n = 1 then s := ' (primär)'
else s := '';
label1.caption := 'Monitor: ' + inttostr(Self.Monitor.Monitornum) + s;
label2.caption := 'Workarea.left: ' + inttostr(rct.left);
label3.caption := 'Workarea.top: ' + inttostr(rct.top);
label4.caption := 'Workarea.right: ' + inttostr(rct.right);
label5.caption := 'Workarea.bottom: ' + inttostr(rct.bottom);
label6.caption := 'Form.left: ' + inttostr(left);
end;
end.