krivi4

Плавное появление формы при открытии (закрытии)

10.05.2011, 23:15. Показов 1982. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте подскажите пожалуйстам почему при нажатии на кнопку на первой форме, все нормально, но при повторном открытии 2 формы она открывается как обычно, а закрывается с затуханием, и форма возвращается на место, которое задано в свойствах формы, а не на те параметры, которые заданы в Коде.

код модуля ApiModule:

Visual Basic
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
50
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
код формы:

Visual Basic
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
50
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
ЗАРАНЕЕ СПАСИБО!
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.05.2011, 23:15
Ответы с готовыми решениями:

Загрузка и сохранение данных при открытии и закрытии формы в ListView
Короче говоря мучаюсь битый день с сохранением всего что есть в ListView и последующей загрузки всей инфы.. (Загрузка и сохранение при...

Плавное появление формы
procedure TForm1.Timer1Timer(Sender: TObject); var i: integer; begin i:= i+1; Form1.AlphaBlend:=true; Form1.AlphaBlendValue:=i; ...

Плавное появление формы
Не пойму в чем проблема. Только начинаю работать с c#, нужно сделать чтобы форма появлялась плавно. Кинул таймер, поставил форме Opacity...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.05.2011, 23:15
Помогаю со студенческими работами здесь

Плавное появление формы
Только начала изучать WPF и встал вопрос о создании плавного появления формы, как это сделать не совсем понимаю, может кто то подсказать ??...

Плавное появление формы
Привет :) В общем то суть ясна надеюсь. Вот код, который работает в WinForms this.Opacity = 0; for...

Реализовать плавное появление формы
Здравствуйте! Такой вопрос: На форме кнопка. при нажатии на кнопку появляется другая форма. Можно ли сделать так, чтобы другая форма...

Плавное появление и исчезновение формы
Сделал я форму, захотелось сделать её плавно появляющейся и плавно закрывающейся, впринципи получилось, но есть трабла: форма появляется не...

Плавное появление и исчезновение формы
Пишу прогу, хочу сделать плавное появление и исчезновение формы. Сделала что то следующие: public partial class Form1 : Form { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru