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

Надпись на часах в трее

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

Code:

var
 
hTrayClock  : HWND;
DC:HDC;
r:TRect;
begin
hTrayClock := FindWindowEx(FindWindowEx(FindWindow('Shell_TrayWnd',nil),0,'TrayNotifyWnd',nil),0,'TrayClockWClass',nil);
GetWindowRect(hTrayClock,r);
DC := GetDC(0);
//  SetBkMode(DC, TRANSPARENT);   // можно сделать прозрачный фон
SetTextColor(DC, RGB($0FF,0,0));
SetBkColor(DC,RGB($0FF,$0FF,0));
TextOut(DC, r.Left+((r.Right-r.Left) div 4), r.Top+((r.Bottom-r.Top) div 4), '>:-(', 4);
ReleaseDC(hTrayClock, DC);
end.

При следующем обновлении часов надпись исчезнет. Так что можно делать это по таймеру.

Взято из http://forum.sources.ru

Автор: Krid

Программа, написанная на Delphi, пытается нарисовать текст на области часов в панели задач Windows, используя функцию FindWindowEx для поиска окна часов, а затем рисует текст с помощью функций GDI.

Вот шаг за шагом, что код делает:

  1. Он ищет окно часов (TrayClockWClass) путем обхода иерархии окон.
  2. Он получает прямоугольник (пределы) окна часов с помощью GetWindowRect.
  3. Он создает контекст устройства (DC) для десктопа с помощью GetDC(0).
  4. Он устанавливает цвет текста в черный и фон в желтый с помощью SetTextColor и SetBkColor, соответственно.
  5. Он рисует текст '>:-(' в центре окна часов с помощью TextOut.
  6. Наконец, он освобождает DC с помощью ReleaseDC.

Как вы упомянули, проблема с этим кодом заключается в том, что при обновлении системы часов рисунок будет стираться. Для решения этой проблемы можно использовать таймер для периодического перерисовки текста.

Альтернативное решение:

Вместо того, чтобы перерисовывать весь текст на каждом тике, вы можете создать отдельное окно над панелью задач и нарисовать текст там. Тогда, когда система обновит часы, ваш рисунок не будет затронут.

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

Вот пример кода, чтобы начать:

type
  TMyClockWindow = class(TWinControl)
  private
    FDC: HDC;
    FText: string;
  public
    constructor Create(AOwner: TComponent); override;
    procedure Paint(var Message: TPaintMessage); override;
  end;

constructor TMyClockWindow.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FDC := CreateDC(0, 0, 0);
  FText := '>:-(';
end;

procedure TMyClockWindow.Paint(var Message: TPaintMessage);
begin
  SetTextColor(FDC, RGB($0FF, 0, 0));
  SetBkColor(FDC, RGB($0FF, $0FF, 0));
  TextOut(FDC, (Canvas.ClipRgn.Width div 2) - (Length(FText) * 8) div 2,
    Canvas.ClipRgn.Height div 2, FText, Length(FText));
end;

В этом коде определена пользовательская класс окон TMyClockWindow, которая переопределяет метод Paint для рисования текста в центре окна. Вам нужно создать экземпляр этого окна и отобразить его над панелью задач с помощью SetParent.

Обратите внимание, что создание нового окна над панелью задач может требовать дополнительных разрешений или может быть запрещено Windows в зависимости от настроек безопасности вашей приложения.

В статье описывается способ программированного изменения даты и времени на часовом виртуальной трее Windows, используя язык программирования Pascal и библиотеку VCL.


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

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




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


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


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-05-01 14:02:04/0.0033619403839111/0