Sources
Delphi Russian Knowledge Base
DRKB - база знаний по Дельфи в рунете, составленная Виталием Невзоровым

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

01.01.2007

Вариант 1:

Author: Даниил Карапетян (delphi4all@narod.ru)

Иногда важно знать, какую часть экрана можно занимать, не перекрывая тем самым такие окна, как 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;

Автор справки: Алексей Денисов (aleksey@sch103.krasnoyarsk.su)


Вариант 2:

Source: DelphiWorld 6.0 https://delphiworld.narod.ru/

Воспользуйтесь функцией 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; 

Вариант 3:

Author: Dimka Maslov, mainbox@endimus.ru

Date: 04.11.2002

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

Зависимости: Windows
Автор:       Dimka Maslov, mainbox@endimus.ru, ICQ:148442121, Санкт-Петербург
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;
Previous page:
Как обновить рабочий стол?
Top:
DRKB
Next page:
Переворачиваем рабочий стол