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

Изменение отображения иконки модального диалога в темной теме Windows в Lazarus

Delphi , Программа и Интерфейс , Модальные формы

Отображение Иконок Модальных Диалогов в Темном Режиме Windows для Lazarus

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

Исследование проблемы

Изначально было предположено, что проблема может быть связана с методами Get/SetClassLong vs. Get/SetClassLongPtr, однако более детальный анализ не выявил подозрительных моментов. Также проверка с использованием старых файлов темного режима показала, что проблема не связана непосредственно с самими файлами тем.

При вызове метода TCustomForm.IconChanged при отображении подсказки был найден вызов функции CalcHintRect, который в свою очередь активировал создание иконок для формы. Вызов Perform(CM_ICONCHANGED, 0, 0) в методе CreateWnd оказался ключевым моментом, вызывающим появление иконки.

Предложенное решение

Пользователь d7_2_laz предложил исключить выполнение кода, отвечающего за создание иконки, если имя формы не пустое (Name <> ''). Это позволило избежать непреднамеренного отображения иконки.

if Name <> '' then       //  Exclude unintended icon handling
  Perform(CM_ICONCHANGED, 0, 0);

Также было предложено проверить тип границы окна (BorderStyle), чтобы исключить создание иконок для окон без границ (например, подсказок).

if BorderStyle = bsNone then       // Или: Sender is THintWindow
  TWSCustomFormClass(WidgetSetClass).SetIcon(Self, 0, 0)

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

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

if Sender Is THintWindow then    // Very specific solution
  exit;

Заключение

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

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


Приведенный выше ответ основан на данных из контекста обсуждения пользователя d7_2_laz. Обсуждение велось на форуме Lazarus, где разработчики и пользователи делятся опытом работы с данной средой разработки.

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

Пользователь столкнулся с проблемой отображения иконки модального диалога в темной теме Windows в среде разработки Lazarus и искал решение этой проблемы.


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

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




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


:: Главная :: Модальные формы ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 16:00:40/0.0054261684417725/1