AlphaBlengWindow
1 отговора
64 прегледа
AlphaBlengWindow
В мрежата ми попаднами следния код за анимация на Win.
Const AW_VER_POSITIVE = &H4
Const AW_HOR_NEGATIVE = &H2
Const AW_HOR_POSITIVE = &H1
Const AW_VER_NEGATIVE = &H8
Const AW_HIDE = &H10000
Const AW_ACTIVATE = &H20000 'Activates the window.
Const AW_SLIDE = &H40000
Const AW_BLEND = &H80000
Const AW_CENTER = &H10
Const BlendAndHide = AW_BLEND Or AW_HIDE
Const BlendAndActivate = AW_BLEND Or AW_ACTIVATE
Const SlideLeftToRight = AW_HOR_POSITIVE Or AW_SLIDE Or AW_HIDE
Const SlideRightToLeft = AW_HOR_NEGATIVE Or AW_SLIDE Or AW_HIDE
Const SlideTopToBottom = AW_VER_POSITIVE Or AW_SLIDE Or AW_HIDE
Const SlideBottomToTop = AW_VER_NEGATIVE Or AW_SLIDE Or AW_HIDE
Const RollLeftToRight = AW_HOR_POSITIVE Or AW_HIDE
Const RollRightToLeft = AW_HOR_NEGATIVE Or AW_HIDE
Const RollTopToBottom = AW_VER_POSITIVE Or AW_HIDE
Const RollBottomToTop = AW_VER_NEGATIVE Or AW_HIDE
Const CollapseInward = AW_CENTER Or AW_HIDE
Private Declare Function AnimateWindow Lib "user32" ( _
ByVal hwnd As Long, _
ByVal dwTime As Long, _
ByVal dwFlags As Long _
) As Boolean
Private Sub Command1_Click()
Load Form2
Form2.Show
AnimateWindow Form2.hwnd, 2500, BlendAndHide
Unload Form2
End Sub
Искам да ви попитам как може да се обърне процеса.
Например процеса за показване на прозореца да е като се стартира
и да остане видим.
Ето какво съм направил:
Private Sub Command2_Click()
Form2.Show
End Sub
Private Sub Form_Initialize()
Me.Left = (Screen.Width - Me.Width) \ 2
Me.Top = (Screen.Height - Me.Height) \ 2
AnimateWindow Me.hwnd, 2000, BlendAndActivate
Me.Refresh
End Sub
Обаче прозореца става първо с черен цвят и трябва да го рефрешна , как мага да избегна това неодобство.
Благодаря предварително за дадените мнения.
Const AW_VER_POSITIVE = &H4
Const AW_HOR_NEGATIVE = &H2
Const AW_HOR_POSITIVE = &H1
Const AW_VER_NEGATIVE = &H8
Const AW_HIDE = &H10000
Const AW_ACTIVATE = &H20000 'Activates the window.
Const AW_SLIDE = &H40000
Const AW_BLEND = &H80000
Const AW_CENTER = &H10
Const BlendAndHide = AW_BLEND Or AW_HIDE
Const BlendAndActivate = AW_BLEND Or AW_ACTIVATE
Const SlideLeftToRight = AW_HOR_POSITIVE Or AW_SLIDE Or AW_HIDE
Const SlideRightToLeft = AW_HOR_NEGATIVE Or AW_SLIDE Or AW_HIDE
Const SlideTopToBottom = AW_VER_POSITIVE Or AW_SLIDE Or AW_HIDE
Const SlideBottomToTop = AW_VER_NEGATIVE Or AW_SLIDE Or AW_HIDE
Const RollLeftToRight = AW_HOR_POSITIVE Or AW_HIDE
Const RollRightToLeft = AW_HOR_NEGATIVE Or AW_HIDE
Const RollTopToBottom = AW_VER_POSITIVE Or AW_HIDE
Const RollBottomToTop = AW_VER_NEGATIVE Or AW_HIDE
Const CollapseInward = AW_CENTER Or AW_HIDE
Private Declare Function AnimateWindow Lib "user32" ( _
ByVal hwnd As Long, _
ByVal dwTime As Long, _
ByVal dwFlags As Long _
) As Boolean
Private Sub Command1_Click()
Load Form2
Form2.Show
AnimateWindow Form2.hwnd, 2500, BlendAndHide
Unload Form2
End Sub
Искам да ви попитам как може да се обърне процеса.
Например процеса за показване на прозореца да е като се стартира
и да остане видим.
Ето какво съм направил:
Private Sub Command2_Click()
Form2.Show
End Sub
Private Sub Form_Initialize()
Me.Left = (Screen.Width - Me.Width) \ 2
Me.Top = (Screen.Height - Me.Height) \ 2
AnimateWindow Me.hwnd, 2000, BlendAndActivate
Me.Refresh
End Sub
Обаче прозореца става първо с черен цвят и трябва да го рефрешна , как мага да избегна това неодобство.
Благодаря предварително за дадените мнения.
Редактирано от VBDEV на
Re: AlphaBlengWindow
Тва горното не важи , има по добър начин
Option Explicit
Private Const AW_BLEND = &H80000
Private Const AW_HIDE = &H10000
Private Const GWL_EXSTYLE = (-20)
Private Const LWA_COLORKEY = &H1
Private Const LWA_ALPHA = &H2
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 crColor As Long, _
ByVal nAlpha As Byte, _
ByVal dwFlags As Long _
) As Long
Sub BlendLoad(ShowBlend As Boolean, frm As Form)
Static i As Integer
If ShowBlend = True Then
While i < 252
Call SetWindowLong(frm.hwnd, GWL_EXSTYLE, GetWindowLong(frm.hwnd, GWL_EXSTYLE) Or AW_BLEND)
DoEvents: i = i + 6
Call SetLayeredWindowAttributes(frm.hwnd, RGB(50, 250, 250), i, LWA_ALPHA Or LWA_COLORKEY)
Wend
ElseIf ShowBlend = False Then
While i < 252
Call SetWindowLong(frm.hwnd, GWL_EXSTYLE, GetWindowLong(frm.hwnd, GWL_EXSTYLE) Or AW_BLEND)
i = i + 6
Call SetLayeredWindowAttributes(frm.hwnd, RGB(50, 250, 250), 254 - i, LWA_ALPHA Or LWA_COLORKEY)
Wend
Unload frm
End If
i = 0
End Sub
Private Sub Form_Activate()
BlendLoad True, Me
End Sub
Private Sub Form_Load()
Call SetWindowLong(Me.hwnd, GWL_EXSTYLE, _
GetWindowLong(Me.hwnd, GWL_EXSTYLE) Or AW_BLEND)
End Sub
Private Sub Form_Unload(Cancel As Integer)
BlendLoad False, Me
End Sub

Option Explicit
Private Const AW_BLEND = &H80000
Private Const AW_HIDE = &H10000
Private Const GWL_EXSTYLE = (-20)
Private Const LWA_COLORKEY = &H1
Private Const LWA_ALPHA = &H2
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 crColor As Long, _
ByVal nAlpha As Byte, _
ByVal dwFlags As Long _
) As Long
Sub BlendLoad(ShowBlend As Boolean, frm As Form)
Static i As Integer
If ShowBlend = True Then
While i < 252
Call SetWindowLong(frm.hwnd, GWL_EXSTYLE, GetWindowLong(frm.hwnd, GWL_EXSTYLE) Or AW_BLEND)
DoEvents: i = i + 6
Call SetLayeredWindowAttributes(frm.hwnd, RGB(50, 250, 250), i, LWA_ALPHA Or LWA_COLORKEY)
Wend
ElseIf ShowBlend = False Then
While i < 252
Call SetWindowLong(frm.hwnd, GWL_EXSTYLE, GetWindowLong(frm.hwnd, GWL_EXSTYLE) Or AW_BLEND)
i = i + 6
Call SetLayeredWindowAttributes(frm.hwnd, RGB(50, 250, 250), 254 - i, LWA_ALPHA Or LWA_COLORKEY)
Wend
Unload frm
End If
i = 0
End Sub
Private Sub Form_Activate()
BlendLoad True, Me
End Sub
Private Sub Form_Load()
Call SetWindowLong(Me.hwnd, GWL_EXSTYLE, _
GetWindowLong(Me.hwnd, GWL_EXSTYLE) Or AW_BLEND)
End Sub
Private Sub Form_Unload(Cancel As Integer)
BlendLoad False, Me
End Sub