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.
При следующем обновлении часов надпись исчезнет. Так что можно делать это по таймеру.
Автор: Krid
Программа, написанная на Delphi, пытается нарисовать текст на области часов в панели задач Windows, используя функцию FindWindowEx для поиска окна часов, а затем рисует текст с помощью функций GDI.
Вот шаг за шагом, что код делает:
Он ищет окно часов (TrayClockWClass) путем обхода иерархии окон.
Он получает прямоугольник (пределы) окна часов с помощью GetWindowRect.
Он создает контекст устройства (DC) для десктопа с помощью GetDC(0).
Он устанавливает цвет текста в черный и фон в желтый с помощью SetTextColor и SetBkColor, соответственно.
Он рисует текст '>:-(' в центре окна часов с помощью TextOut.
Наконец, он освобождает DC с помощью ReleaseDC.
Как вы упомянули, проблема с этим кодом заключается в том, что при обновлении системы часов рисунок будет стираться. Для решения этой проблемы можно использовать таймер для периодического перерисовки текста.
Альтернативное решение:
Вместо того, чтобы перерисовывать весь текст на каждом тике, вы можете создать отдельное окно над панелью задач и нарисовать текст там. Тогда, когда система обновит часы, ваш рисунок не будет затронут.
Вы можете достичь этого, создав новое окно с помощью CreateWindowEx и нарисовав текст с помощью функций GDI, как раньше. Вам также нужно будет обрабатывать клики мыши и другие события для этого окна.
В этом коде определена пользовательская класс окон TMyClockWindow, которая переопределяет метод Paint для рисования текста в центре окна. Вам нужно создать экземпляр этого окна и отобразить его над панелью задач с помощью SetParent.
Обратите внимание, что создание нового окна над панелью задач может требовать дополнительных разрешений или может быть запрещено Windows в зависимости от настроек безопасности вашей приложения.
В статье описывается способ программированного изменения даты и времени на часовом виртуальной трее Windows, используя язык программирования Pascal и библиотеку VCL.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS