// Getestet mit D4 unter XP

// 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.



 

Zugriffe seit 6.9.2001 auf Delphi-Ecke