powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Плавное появление формы при открытии (закрытии)
8 сообщений из 8, страница 1 из 1
Плавное появление формы при открытии (закрытии)
    #37253870
krivi4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте подскажите пожалуйстам почему при нажатии на кнопку на первой форме, все нормально, но при повторном открытии 2 формы она открывается как обычно, а закрывается с затуханием, и форма возвращается на место, которое задано в свойствах формы, а не на те параметры, которые заданы в Коде.

код модуля ApiModule:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
Option Explicit 

 'объявление API-функций и констант 
  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 
  Private Declare Function GetLayeredWindowAttributes Lib "user32" (ByVal hWnd As Long, _ 
                                                                   ByRef crKey As Long, _ 
                                                                   ByRef bAlpha As Byte, _ 
                                                                   ByRef dwFlags As Long) As Long 
  Private Const GWL_STYLE = (- 16 ) 
  Private Const GWL_EXSTYLE = (- 20 ) 
  Private Const LWA_COLORKEY = &H1 
  Private Const LWA_ALPHA = &H2 
  Private Const WS_EX_LAYERED = &H80000 
   
   
  'Создание прозрачности у окна 
  Public Sub SetOpacity(hWnd As Long, opacity As Byte) 
   If opacity <  254  Then 'если значение opacity меньше 254, то добавляем к окну прозрачность 
     Dim lStyle As Long 
     lStyle = GetWindowLong(hWnd, GWL_EXSTYLE) 'стиль окна 
     lStyle = lStyle Or WS_EX_LAYERED 'делаем его слоистым 
     SetWindowLong hWnd, GWL_EXSTYLE, lStyle 'обновляем стиль 
     SetLayeredWindowAttributes hWnd,  0 , opacity, LWA_ALPHA 'устанавливаем прозрачность 
   Else 'в любом другом случае 
     SetWindowLong hWnd, GWL_EXSTYLE,  0  'устанавливаем обычные атрибуты окна 
   End If 
 End Sub 

 'Получение прозрачности окна 
 Public Function GetOpacity(hWnd As Long) As Byte 
   Dim opacity As Byte 
   Dim lStyle As Long 
   lStyle = GetWindowLong(hWnd, GWL_EXSTYLE) 'стиль окна 
   If (lStyle And WS_EX_LAYERED) =  0  Then 'является ли окно слоистым. 
     'Если нет, то возвращаем значение 255 
     lStyle = lStyle Or WS_EX_LAYERED 
     GetOpacity =  255  
   Else 'Если да, то возвращаем его прозрачность 
     Call GetLayeredWindowAttributes(hWnd,  0 , opacity,  0 ) 
     GetOpacity = opacity 
   End If 
 End Function

код формы:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
Option Explicit 
 Private opacity As Byte 'Прозрачность окна 
 Private Const FADING_STEP As Byte =  8  'Скорость изменения прозрачности 

 'Открытие формы 
 Private Sub Form_Initialize() 
   opacity =  0  
   Call ApiModule.SetOpacity(Me.hWnd, opacity) 
   FadingTimer.Tag = "Appear" 
   FadingTimer.Enabled = True 
 End Sub 

 'Закрытие формы 
 Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) 
   opacity =  254  
   FadingTimer.Tag = "Fade" 
   FadingTimer.Enabled = True 
   Cancel = ApiModule.GetOpacity(Me.hWnd) 
 End Sub 

 Private Sub FadingTimer_Timer() 
   Select Case FadingTimer.Tag 
     Case "Fade" 
       Call Fade 
     Case "Appear" 
       Call Appear 
   End Select 
 End Sub 

 'Затухание формы 
 Private Sub Fade() 
   If opacity >= FADING_STEP Then 
     opacity = opacity - FADING_STEP 
   Else 
     opacity =  0  
   End If 
   Call ApiModule.SetOpacity(Me.hWnd, opacity) 
   If opacity =  0  Then Unload Me 
 End Sub 

 'Появление формы 
 Private Sub Appear() 
   If  255  - opacity < FADING_STEP Then 
     opacity =  255  
   Else 
     opacity = opacity + FADING_STEP 
   End If 
   Call ApiModule.SetOpacity(Me.hWnd, opacity) 
   FadingTimer.Enabled = Not (opacity =  255 ) 
 End Sub

ЗАРАНЕЕ СПАСИБО!
...
Рейтинг: 0 / 0
Плавное появление формы при открытии (закрытии)
    #37254843
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Затухание окна делается одной api функцией — AnimateWindow.
...
Рейтинг: 0 / 0
Плавное появление формы при открытии (закрытии)
    #37255745
krivi4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Antonariy,

можешь прислать код для открытия и закрытия плавного?
...
Рейтинг: 0 / 0
Плавное появление формы при открытии (закрытии)
    #37256031
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня нет. Есть у яндекса.
...
Рейтинг: 0 / 0
Плавное появление формы при открытии (закрытии)
    #37256034
krivi4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ясно я думал тут помогус сорри
...
Рейтинг: 0 / 0
Плавное появление формы при открытии (закрытии)
    #37256468
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хочешь, чтобы тебе с принесли решение на тарелочке да с фанфарами — оплачивай посуду и музыкантов.
...
Рейтинг: 0 / 0
Плавное появление формы при открытии (закрытии)
    #37258851
krivi4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
если не заметил все готова, подсказать в чем причина почему так происходит, я думал форум для этого и нужен
...
Рейтинг: 0 / 0
Плавное появление формы при открытии (закрытии)
    #37259068
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Готова кривая ерунда, которую прямить нет никакого смысла и интереса.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Плавное появление формы при открытии (закрытии)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]