AlphaBlengWindow

1 отговора 64 прегледа
#1

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

Обаче прозореца става първо с черен цвят и трябва да го рефрешна , как мага да избегна това неодобство.

Благодаря предварително за дадените мнения.

Редактирано от VBDEV на

Отговор
в отговор на VBDEV #2

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




Отговор