Прозрачность

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
inf
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 53
Зарегистрирован: 28.09.2006 (Чт) 21:10
Откуда: мы все оттуда

Прозрачность

Сообщение inf » 20.11.2006 (Пн) 23:19

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

Код: Выделить всё
Const LWA_ALPHA = &H2
Const GWL_EXSTYLE = (-20)
Const WS_EX_LAYERED = &H80000
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hWnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
  Dim aStyle As Long
  Dim Transparent As Byte

Private Sub Command1_Click()
On Error Resume Next
For Transparent = 150 To 255
aStyle = GetWindowLong(Me.hWnd, GWL_EXSTYLE)
aStyle = aStyle Or WS_EX_LAYERED
Call SetWindowLong(Me.hWnd, GWL_EXSTYLE, aStyle)
Call SetLayeredWindowAttributes(Me.hWnd, 0, Transparent, LWA_ALPHA)
Next Transparent
End Sub

Private Sub Command2_Click()
On Error Resume Next
For Transparent = 255 To 150 Step -1
aStyle = GetWindowLong(Me.hWnd, GWL_EXSTYLE)
aStyle = aStyle Or WS_EX_LAYERED
Call SetWindowLong(Me.hWnd, GWL_EXSTYLE, aStyle)
Call SetLayeredWindowAttributes(Me.hWnd, 0, Transparent, LWA_ALPHA)
Next Transparent
End Sub

Private Sub Form_Load()
Transparent = 150
aStyle = GetWindowLong(Me.hWnd, GWL_EXSTYLE)
aStyle = aStyle Or WS_EX_LAYERED
Call SetWindowLong(Me.hWnd, GWL_EXSTYLE, aStyle)
Call SetLayeredWindowAttributes(Me.hWnd, 0, Transparent, LWA_ALPHA)
End Sub
Изображение

inf
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 53
Зарегистрирован: 28.09.2006 (Чт) 21:10
Откуда: мы все оттуда

Сообщение inf » 20.11.2006 (Пн) 23:40

И еще назрел вопрос: Как сделать полупрозрачной форму а контролы на ней не прозрачными?
Изображение

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 21.11.2006 (Вт) 2:29

Первое, хоть так:

Код: Выделить всё
    For Transparent = 0 To 105
        aStyle = GetWindowLong(Me.hWnd, GWL_EXSTYLE)
        aStyle = aStyle Or WS_EX_LAYERED
        Call SetWindowLong(Me.hWnd, GWL_EXSTYLE, aStyle)
        Call SetLayeredWindowAttributes(Me.hWnd, 0, 255 - Transparent, LWA_ALPHA)
    Next Transparent


Второе - в поиск по "PNG ULW_ALPHA"
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

inf
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 53
Зарегистрирован: 28.09.2006 (Чт) 21:10
Откуда: мы все оттуда

Сообщение inf » 21.11.2006 (Вт) 18:50

Скажите почему в этом месте пишет ошибку "переполнение"?
Код: Выделить всё
For Transparent = 255 To 150 Step -1
Изображение

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 21.11.2006 (Вт) 19:01

Объяви Transparent как Integer.
Изображение

inf
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 53
Зарегистрирован: 28.09.2006 (Чт) 21:10
Откуда: мы все оттуда

Сообщение inf » 24.11.2006 (Пт) 14:11

BV писал(а):Второе - в поиск по "PNG ULW_ALPHA"


=(( Почемуто ничего полезного не находит. А если находит, то либо си либо делфи
Дайте ссылочку плз
Изображение

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 24.11.2006 (Пт) 16:18

Странно. А у меня находит.
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 34

    TopList