Определить размера рабочей области Desktop'а

Материал из DRKB

Определить размера рабочей области Desktop'а[править | править код]

Иногда важно знать, какую часть экрана можно занимать, не перекрывая тем самым такие окна, как TaskBar. Эта программа разворачивает окно на всю рабочую область Desktop'а.

procedure TForm1.Button1Click(Sender: TObject);
var
  r: TRect;
begin
  SystemParametersInfo(SPI_GETWORKAREA, 0, Addr(r), 0);
  Form1.Left := r.Left;
  Form1.Top := r.Top;
  Form1.Width := r.Right - r.Left;
  Form1.Height := r.Bottom - r.Top;
end;


e-mail: delphi4all@narod.ru
e-mail: aleksey@sch103.krasnoyarsk.su

Author: Алексей Денисов
ID: 01829



Воспользуйтесь функцией SystemParametersInfo(), переслав ей в качестве параметров - SPI_GETWORKAREA и адрес структуры типа TRect, куда будут передан полученный результат:

procedure TForm1.Button1Click(Sender: TObject);
var
  r: TRect;
begin
  SystemParametersInfo(SPI_GETWORKAREA, 0, @r, 0);
  Memo1.Lines.Add(IntToStr(r.Top));
  Memo1.Lines.Add(IntToStr(r.Left));
  Memo1.Lines.Add(IntToStr(r.Bottom));
  Memo1.Lines.Add(IntToStr(r.Right));
end;


Source: http://delphiworld.narod.ru/
ID: 01830



Получение координат области Рабочего стола, не скрытой Панелью задач[править | править код]

{ **** UBPFD *********** by delphibase.endimus.com ****
>> Получение координат области Рабочего стола, не скрытой Панелью задач

Зависимости: Windows

Copyright:   Dimka Maslov
Дата:        4 ноября 2002 г.
***************************************************** }

function GetDesktopRect: TRect;
var
  RgnDesktop, RgnTrayWnd: HRGN;

  function CreateWindowRgn(Handle: HWND): HRGN;
  var
    R: TRect;
  begin
    GetWindowRect(Handle, R);
    with R do
      Result := CreateRectRgn(Left, Top, Right, Bottom);
  end;

begin
  RgnDesktop := CreateWindowRgn(GetDesktopWindow);
  try
    RgnTrayWnd := CreateWindowRgn(FindWindow('Shell_TrayWnd', ''));
    try
      CombineRgn(RgnDesktop, RgnDesktop, RgnTrayWnd, RGN_DIFF);
      GetRgnBox(RgnDesktop, Result);
    finally
      DeleteObject(RgnTrayWnd);
    end;
  finally
    DeleteObject(RgnDesktop);
  end;
end;


Source: http://delphibase.endimus.com
ID: 01831