Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

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

Delphi , Рабочий стол , Рабочий стол

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

Автор: Dimka Maslov
WEB-сайт: http://delphibase.endimus.com

{ **** 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;

Перевод контента на русский язык:

Функция Delphi под именем GetDesktopRect получает координаты области рабочего стола, исключая область системной панели (также известную как область уведомлений). Функция использует Windows API для достижения этого.

Вот разбивка того, что код делает:

  1. Он определяет две переменные: RgnDesktop и RgnTrayWnd, которые являются handle-ами объектов региона.
  2. Он определяет вложенную функцию под именем CreateWindowRgn, которая принимает handle окна в качестве входного параметра и возвращает объект региона, созданный из прямоугольника окна.
  3. Основная функция GetDesktopRect создает объект региона для окна рабочего стола с помощью CreateWindowRgn.
  4. Затем она создает объект региона для окна системной панели с помощью FindWindow, чтобы найти окно системной панели, и CreateWindowRgn, чтобы создать объект региона из его прямоугольника.
  5. Функция комбинирует два объекта региона с помощью CombineRgn с флагом RGN_DIFF, который вычитывает область системной панели из области рабочего стола.
  6. Она получает рамку bounding box результата региона с помощью GetRgnBox и возвращает ее как объект TRect.

Вот некоторые предложения по улучшению:

  1. Обработка ошибок: Функция использует блоки try-finally для обеспечения удаления объектов региона, даже если возникает ошибка. Однако лучше было бы обрабатывать ошибки явно, а не полагаться на finally-블лок.
  2. Организация кода: Вложенная функция CreateWindowRgn не является необходимой и может быть встроена в основную функцию.
  3. Имя переменных: Некоторые имена переменных, такие как RgnDesktop и RgnTrayWnd, несколько неясны. Рекомендуется использовать более описательные имена для улучшения читаемости кода.

Вот альтернативное решение, которое адресует эти предложения:

function GetDesktopRect: TRect;
var
  DesktopRegion, TrayRegion: HREGION;
begin
  try
    DesktopRegion := CreateRectRgn(GetDesktopWindow);
    TrayRegion := CreateRectRgn(FindWindow('Shell_TrayWnd', ''));
    CombineRgn(DesktopRegion, DesktopRegion, TrayRegion, RGN_DIFF);
    GetRgnBox(DesktopRegion, Result);
  except
     // обработка ошибки здесь
  end;
  DeleteObject(TrayRegion);
  DeleteObject(DesktopRegion);
end;

В этом альтернативном решении я убрал вложенную функцию и встроил ее код в основную функцию. Я также использовал более описательные имена переменных и добавил явную обработку ошибок с помощью блока try-except.

В статье Dimka Maslov описывается функция GetDesktopRect, позволяющая получить координаты области Рабочего стола, не скрытой панелью задач в Windows.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Рабочий стол ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 12:50:19/0.005669116973877/1