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

Определить позицию панели задач 2

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

Определить позицию панели задач 2

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

 {With FindWindow, GetWindowRect }

 type
   TTaskBarPos = (_TOP, _BOTTOM, _LEFT, _RIGHT, _NONE);

 function GetTaskBarPos: TTaskBarPos;
 var
   hTaskbar: HWND;
   T: TRect;
   scrW, scrH: integer;
 begin
   hTaskBar := FindWindow('Shell_TrayWnd', nil);
   if hTaskbar <> 0 then
   begin
     GetWindowRect(hTaskBar, T);
     ScrW := Screen.Width;
     ScrH := Screen.Height;
     if (T.Top > scrH div 2) and (T.Right >= scrW) then
       Result := _BOTTOM
     else if (T.Top < scrH div 2) and (T.Bottom <= scrW div 2) then
       Result := _TOP
     else if (T.Left < scrW div 2) and (T.Top <= 0) then
       Result := _LEFT
     else // the last "if" is not really needed 
    if T.Left >= ScrW div 2 then
       Result := _RIGHT;
   end;
 end;

 procedure TForm1.Button5Click(Sender: TObject);
 var
   TaskBarPos: TTaskBarPos;
 begin
   TaskBarPos := GetTaskBarPos;
   case TaskBarPos of
     _LEFT: ShowMessage('Left Position');
     _TOP: ShowMessage('Top Position');
     _RIGHT: ShowMessage('Right Position');
     _BOTTOM: ShowMessage('Bottom Position');
   end;
 end;

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

Код Delphi, который определяет позицию панели задач (Taskbar) на экране. Функция GetTaskBarPos использует функции WinAPI FindWindow и GetWindowRect, чтобы получить handle окна (hTaskbar) и координаты прямоугольника (T) окна Shell_TrayWnd, которое является панелью задач.

Код затем проверяет позицию панели на экране, сравнивая координаты верхнего левого угла панели с размерами экрана. Если верхняя граница панели находится выше середины экрана и правая граница панели находится справа от полного ширины экрана, то это считается нижней позицией (_BOTTOM). Если верхняя граница панели находится ниже середины экрана и нижняя граница панели находится слева от половины ширины экрана, то это считается верхней позицией (_TOP).

Если ни одна из этих условий не выполнена, код проверяет, если левая граница панели находится слева от половины ширины экрана. Если так, то это считается левой позицией (_LEFT). В противном случае - правой позицией (_RIGHT).

Процедура Button5Click вызывает функцию GetTaskBarPos и отображает сообщение с позицией панели.

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

  1. Вызов GetWindowRect может вернуть 0, если окно не найдено, но код не проверяет это условие.
  2. Расчеты ширины и высоты экрана можно упростить, используя свойства Width и Height объекта Screen.
  3. Последний "if" в функции GetTaskBarPos является ненужным, потому что предыдущие условия уже определили позицию.
  4. Код использует магические числа (например, scrH div 2), которые могут быть неясными без дополнительного контекста. Лучше определить константы для этих значений.

Вот улучшенная версия кода:

type
  TTaskBarPos = (_TOP, _BOTTOM, _LEFT, _RIGHT, _NONE);

function GetTaskBarPos: TTaskBarPos;
var
  hTaskbar: HWND;
  T: TRect;
begin
  hTaskbar := FindWindow('Shell_TrayWnd', nil);
  if hTaskbar = 0 then
    Exit(_NONE); // или какой-то другой дефолтный значений

  GetWindowRect(hTaskbar, T);

  if (T.Top > Screen.Height div 2) and (T.Right >= Screen.Width) then
    Result := _BOTTOM
  else if (T.Top < Screen.Height div 2) and (T.Bottom <= Screen.Width div 2) then
    Result := _TOP
  else if (T.Left < Screen.Width div 2) and (T.Top <= 0) then
    Result := _LEFT
  else
    Result := _RIGHT;
end;

procedure TForm1.Button5Click(Sender: TObject);
var
  TaskBarPos: TTaskBarPos;
begin
  TaskBarPos := GetTaskBarPos;
  case TaskBarPos of
    _LEFT: ShowMessage('Left Position');
    _TOP: ShowMessage('Top Position');
    _RIGHT: ShowMessage('Right Position');
    _BOTTOM: ShowMessage('Bottom Position');
  end;
end;

Замечу, что я удалил ненужный "if" и добавил простой проверку hTaskbar = 0 для обработки случая, когда окно панели задач не найдено. Я также упростил расчеты ширины и высоты экрана, используя свойства Screen.Width и Screen.Height.

Статья описывает функцию GetTaskBarPos на Delphi, которая определяет позицию панели задач на экране.


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

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




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


:: Главная :: TaskBar ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-01-29 08:54:28/0.0032429695129395/0