Найти в Дзене
VBA Excel с нуля

VBA Excel № 181. Создание полупрозрачного окна UserForm

Обычно окно UserForm в VBA совершенно непрозрачно, оно закрывает всё, что находится под ним. Возможно могут сложится обстоятельства, кода необходимо иметь полупрозрачное окно, чтобы одновременно наблюдать как за формой, так и за Excel-листом, находящимся под ним. Попробуем добиться этого эффекта с помощью Windows API. Анонс данной статьи вместе с файлом примером был выложен накануне на моём телеграмм канале. Многие читатели заранее скачали файл и ознакомились с работой макросов. Рад, что интересуетесь... Полупрозрачность достигается с помощью специального параметра уровня прозрачности, который варьируется от 0 (полностью прозрачное окно, невидимое) до 255 (полностью непрозрачное). Значения в отдельности от 1 до 254 означают различную степень полупрозрачности. На приведенном ниже скриншоте видно, как выглядит UserForm с уровнем прозрачности, установленным около 200. Все строки кода закомментированы, чтобы понять, о чем толкует строка. Вначале определяется версия - для уточнения разряд
Оглавление
Скриншот с моего ноутбука
Скриншот с моего ноутбука

Обычно окно UserForm в VBA совершенно непрозрачно, оно закрывает всё, что находится под ним. Возможно могут сложится обстоятельства, кода необходимо иметь полупрозрачное окно, чтобы одновременно наблюдать как за формой, так и за Excel-листом, находящимся под ним. Попробуем добиться этого эффекта с помощью Windows API.

Анонс данной статьи вместе с файлом примером был выложен накануне на моём телеграмм канале. Многие читатели заранее скачали файл и ознакомились с работой макросов. Рад, что интересуетесь...

Полупрозрачность достигается с помощью специального параметра уровня прозрачности, который варьируется от 0 (полностью прозрачное окно, невидимое) до 255 (полностью непрозрачное). Значения в отдельности от 1 до 254 означают различную степень полупрозрачности.

На приведенном ниже скриншоте видно, как выглядит UserForm с уровнем прозрачности, установленным около 200.

Скриншот с моего ноутбука
Скриншот с моего ноутбука

📌 Скачать файл пример, можно в конце статьи.

Все строки кода закомментированы, чтобы понять, о чем толкует строка. Вначале определяется версия - для уточнения разрядности Вашей системы (32 или 64). Выставляются константы, которые впоследствии используются в функции TransparentUserForm (придает UserForm прозрачности). Функция вызывается процедурой scbTrans_Change (изменяет прозрачность при перемещении ползунка).

Так выглядит код в модуле формы:

Скриншот с моего ноутбука
Скриншот с моего ноутбука
Скриншот с моего ноутбука
Скриншот с моего ноутбука

Коротко

  1. Windows API: Код использует функции API для взаимодействия с оконными системами. Эти функции позволяют изменять стили окон и сохранять уровень прозрачности.
  2. Дескриптор окна ( hwnd): Это уникальный идентификатор окна, который нужен для изменения его свойства.
  3. Стиль WS_EX_LAYERED: Этот стиль делает окно полупрозрачным, что позволяет улучшить его видимость.
  4. Флаг LWA_ALPHA: Используется для настройки уровня прозрачности через альфа-канал.
  5. Ползунок (scbTrans): включает изменение прозрачности формы, уровень обновления при каждом движении ползунка.

Короткое видео о работе программы:

✔ СКАЧАТЬ ФАЙЛ ПРИМЕР