| Вопрос: Полупрозрачность окон
Совет:
Автор: Хованский Ян Дата: 09.05.2003
Вступление
В этой статье я расскажу, как реализовать в своей программе полупрозрачность, да, именно полупрозрачность, а не прозрачность, о которой написано очень много. В данной статье вы узнаете как создавать полупрозрачные окна.
Примечание: примеры из статьи будут работать только в windows 2000 и выше.
Ну, что - начнём?
Сначала создадим процедуру, которая будет делать окно прозрачным по его манипулятору.
1. Создайте новый проект
2. Добавьте в проект новый модуль
3. Добавьте в модуль следующий код:
'API функции
'Функция определяет стиль окна
Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, _ ByVal nIndex As Long) As Long
'Функция задаёт стиль окна
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, _ ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
'Функция делает окно прозрачным
Public Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hWnd As Long, _
ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
'Константы
Public Const LWA_COLORKEY = &H1
Public Const LWA_ALPHA = &H2
Public Const GWL_EXSTYLE = (-20)
Public Const WS_EX_LAYERED = &H80000
'Процедура
'hWnd - манипулятор окна, Layered - степень прозрачности от 0 до 255
Public Sub SetTransparent(hWnd As Long, Layered As Byte)
Dim Ret As Long
'Определяем стиль нужного окна
Ret = GetWindowLong(hWnd, GWL_EXSTYLE)
'Задаём стиль окна как заслоённый
Ret = Ret Or WS_EX_LAYERED
SetWindowLong hWnd, GWL_EXSTYLE, Ret
'Задём степень прозрачности окна
SetLayeredWindowAttributes hWnd, 0, Layered, LWA_ALPHA
End Sub
4. Сохраните модуль под именем mdlTransparent.bas, проект можете не сохранять
Всё! Процедура создана! Как ей пользоваться читайте дальше
Примеры:
Пример №1: Полупрозрачная форма
Самый простой пример, требующий всего одной дополнительной строчки кода:
1. Создайте новый проект
2. Добавьте в проект модуль mdlTransparent.bas
3. На созданную вместе с проектом форму добавьте кнопку и текстовое поле
4. В событие Form_Load () вставьте следующий код:
SetTransparent Me.hWnd, 212
5. Запустите проект. Ну, как? Красиво, не правда ли?
И самое главное - все контролы, которые находятся на форме также стали полупрозрачными
Пример №2: Полупрозрачная панель задач
Этот пример будет немного посложнее:
1. Создайте новый проект
2. Добавьте в проект модуль mdlTransparent.bas
3. На созданную вместе с проектом форму добавьте метку и горизонтальную полосу прокрутки:
4. Измените свойства элементов:
Имя элемента управления: Свойство: Значение:
HScroll1 Min 0
HScroll1 Max 255
Label1 Caption Степень прозрачности
5. Добавьте в модуль формы следующий код:
'Функция для поиска окна первого уровня
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
'Манипулятор окна
Dim hnd As Long
Private Sub Form_Load()
'Ищем манипулятор панели задач
hnd = FindWindow("Shell_TrayWnd", vbNullString)
End Sub
Private Sub HScroll1_Change()
'Делаем панель задач полупрозрачной
SetTransparent hnd, 255 - HScroll1.Value
End Sub
Теперь панель задач полупрозрачная, с помощью горизонтальной полосы прокрутки вы можете задавать степень прозрачности.
И последнее: полупрозрачными, можно сделать только окна первого уровня. Т.е. нельзя сделать полупрозрачными дочерние окна, такие как кнопки, текстовые поля и т.д.
Остались вопросы пишите: yan@newmail.ru
Просмотров: 2077 Источник: http://vbkoders.net.ru
Добавить комментарий
Имя *:
E-mail:
Комментарий *:
Комментарии: | |