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

Как сделать так, чтобы ваше приложение в Delphi появлялось в определенной зоне экрана рядом с системным треем в Windows

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

Вопрос пользователя заключается в том, как сделать так, чтобы скрытое приложение на Delphi, использующее компонент TTrayIcon, появлялось в определенной зоне экрана, а именно рядом с системным треем (taskbar) в Windows. Это особенно важно, так как пользователь может изменить расположение taskbar, и приложению необходимо корректно реагировать на эти изменения.

Решение проблемы

Для решения этой задачи можно использовать функцию SHAppBarMessage с параметром ABM_GETTASKBARPOS, которая позволяет получить информацию о расположении taskbar. Сочетание этой информации с размерами основного монитора позволяет определить, находится taskbar в верхней, левой, нижней или правой части экрана, а также его размеры.

Пример кода на Object Pascal

uses
  Winapi.ShellApi;

type
  TTaskbarPlacement = (ABE_TOP, ABE_LEFT, ABE_BOTTOM, ABE_RIGHT);

var
  appBarData: TRect;
  nScreenWidth, nScreenHeight: Integer;
  FTaskbarPlacement: TTaskbarPlacement;
  TASKBAR_X_TOLERANCE, TASKBAR_Y_TOLERANCE: Integer = 5;

procedure TForm1.FormCreate(Sender: TObject);
begin
  nScreenWidth := GetSystemMetrics(SM_CXSCREEN);
  nScreenHeight := GetSystemMetrics(SM_CYSCREEN);
  appBarData := Rect(0, 0, 0, 0);
  if SHAppBarMessage(ABM_GETTASKBARPOS, appBarData) <> S_OK then
    Exit;

  // Вычисление положения taskbar
  if NearlyEqual(appBarData.Left, 0, TASKBAR_X_TOLERANCE) and
    NearlyEqual(appBarData.Right, nScreenWidth, TASKBAR_X_TOLERANCE) then
  begin
    // Taskbar находится сверху или снизу
    if NearlyEqual(appBarData.Top, 0, TASKBAR_Y_TOLERANCE) then
      FTaskbarPlacement := ABE_TOP
    else
      FTaskbarPlacement := ABE_BOTTOM;
  end
  else
  begin
    // Taskbar находится слева или справа
    if NearlyEqual(appBarData.Left, 0, TASKBAR_X_TOLERANCE) then
      FTaskbarPlacement := ABE_LEFT
    else
      FTaskbarPlacement := ABE_RIGHT;
  end;
end;

procedure TForm1.ShowNotificationAreaPopup(const APlacement: TTaskbarPlacement);
var
  rcTaskbar: TRect;
begin
  // Предполагаем, что rcTaskbar уже заполнен актуальными размерами taskbar
  case APlacement of
  ABE_RIGHT:
   begin
    Self.Left := rcTaskbar.Left - Self.Width;
    Self.Top := rcTaskbar.Bottom - Self.Height;
   end;
  ABE_LEFT:
   begin
    Self.Left := rcTaskbar.Right;
    Self.Top := rcTaskbar.Bottom - Self.Height;
   end;
  ABE_TOP:
   begin
    Self.Left := rcTaskbar.Right - Self.Height;
    Self.Top := rcTaskbar.Bottom;
   end;
  else //ABE_BOTTOM
   begin
    // Taskbar находится снизу или не виден
    Self.Left := rcTaskbar.Right - Self.Width;
    Self.Top := rcTaskbar.Top - Self.Height;
   end;
  end;
end;

procedure TForm1.TrayIconClick(Sender: TObject);
begin
  // Показать форму в районе системного трея
  ShowNotificationAreaPopup(FTaskbarPlacement);
end;

Подводящий итог

Используя приведенный выше код, вы можете управлять позиционированием вашего приложения так, чтобы оно появлялось рядом с системным треем, вне зависимости от того, как пользователь расположил taskbar на экране. Это полезно для создания интуитивно понятного и удобного пользовательского интерфейса, особенно для всплывающих уведомлений и небольших окон.

Создано по материалам из источника по ссылке.

Приложение на Delphi с использованием компонента `TTrayIcon` должно динамически изменять своё положение на экране, чтобы появляться рядом с системным треем, учитывая его расположение и размеры.


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

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




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


:: Главная :: TrayBar ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 17:11:25/0.0031909942626953/0