Плавное затухание

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

Плавное затухание

Сообщение Конь » 12.06.2006 (Пн) 11:27

Как сделать, чтобы форма не просто закрывалась, а "затухала" (т.е. делалась постепенно прозрачной)?
Подпись находится в стадии разработки...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

ре: не помню как там и что...

Сообщение Хакер » 12.06.2006 (Пн) 11:49

А можно заюзать SetLayeredWindowAttributes но это работает не везде (т.е. не работает со старой видной)


Интересно, видел ли Опасный этот кусочек?
Последний раз редактировалось Хакер 15.06.2006 (Чт) 20:13, всего редактировалось 1 раз.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Lumen
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 841
Зарегистрирован: 03.12.2005 (Сб) 16:09
Откуда: Брянск

Сообщение Lumen » 12.06.2006 (Пн) 13:34

Использование AnimateWindow:
Код: Выделить всё
Const AW_HOR_POSITIVE = &H1 'Animates the window from left to right. This flag can be used with roll or slide animation.
Const AW_HOR_NEGATIVE = &H2 'Animates the window from right to left. This flag can be used with roll or slide animation.
Const AW_VER_POSITIVE = &H4 'Animates the window from top to bottom. This flag can be used with roll or slide animation.
Const AW_VER_NEGATIVE = &H8 'Animates the window from bottom to top. This flag can be used with roll or slide animation.
Const AW_CENTER = &H10 'Makes the window appear to collapse inward if AW_HIDE is used or expand outward if the AW_HIDE is not used.
Const AW_HIDE = &H10000 'Hides the window. By default, the window is shown.
Const AW_ACTIVATE = &H20000 'Activates the window.
Const AW_SLIDE = &H40000 'Uses slide animation. By default, roll animation is used.
Const AW_BLEND = &H80000 'Uses a fade effect. This flag can be used only if hwnd is a top-level window.
Private Declare Function AnimateWindow Lib "user32" (ByVal hwnd As Long, ByVal dwTime As Long, ByVal dwFlags As Long) As Boolean
Private Sub Form_Load()
    'KPD-Team 1999
    'URL: http://www.allapi.net/
    'E-Mail: KPDTeam@Allapi.net
    'Set the graphic mode to persistent
    Me.AutoRedraw = True
    Me.Print "Unload me"
End Sub
Private Sub Form_Unload(Cancel As Integer)
    'Animate the window
    AnimateWindow Me.hwnd, 200, AW_VER_POSITIVE Or AW_HOR_NEGATIVE Or AW_HIDE
    'Unload our form completely
    Set Form1 = Nothing
End Sub
Подпись проходит рефакторинг

Конь
Постоялец
Постоялец
 
Сообщения: 650
Зарегистрирован: 02.06.2006 (Пт) 6:49
Откуда: г. Красноярск

Сообщение Конь » 12.06.2006 (Пн) 15:46

Огромное "благодарю" :) !
Подпись находится в стадии разработки...

Конь
Постоялец
Постоялец
 
Сообщения: 650
Зарегистрирован: 02.06.2006 (Пт) 6:49
Откуда: г. Красноярск

Сообщение Конь » 13.06.2006 (Вт) 11:18

Я немного не то имел в виду.
Эта функция как бы сворачивает окно. А оно должно становиться прозрачным!
Подпись находится в стадии разработки...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 13.06.2006 (Вт) 11:22

Конь

Некототорые Люди имеют обыкновение копипастить примеры которые делают совсем не то... что нужно....

замени AW_VER_POSITIVE Or AW_HOR_NEGATIVE Or AW_HIDE на
AW_HIDE + AW_BLEND
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Re: ре: не помню как там и что...

Сообщение Twister » 13.06.2006 (Вт) 11:31

Хакер писал(а):
Код: Выделить всё
Declare Function AnimateWindow Lib "user32" (ByVal hwnd As Long, ByVal dwTime As Long, ByVal dwFlags As Long) As Boolean

Что за привычка писать Declaration функции? Я ее тоже знаю и что? Сразу бы и написал, что использовать ее нужно с константами AW_HIDE + AW_BLEND в параметре dwFlags...
Хакер писал(а):А можно заюзать SetLayeredWindow но это работает не везде (т.е. не работает со старой видной)
SetLayeredWindowAttributes
А я все практикую лечение травами...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 13.06.2006 (Вт) 11:35

Twister, чё то ты сегодня злой :x

Декларация я даю потому что мне лень править АпиГуидный пример. А по имени апи - её можно найти в хелпе, и названиям аргументов - догадаться, за что они отвечают...

На счёт LayerWindow - ну да ошибся... что теперь...
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 13.06.2006 (Вт) 11:38

Эх не говори, не выспался я сегодня... :wink:
Но все же, неточный ответ может ввести новичка в заблуждение. И потом начнется - "а почему, а что, а как..."
А я все практикую лечение травами...

Конь
Постоялец
Постоялец
 
Сообщения: 650
Зарегистрирован: 02.06.2006 (Пт) 6:49
Откуда: г. Красноярск

Сообщение Конь » 13.06.2006 (Вт) 14:05

Хакер
Ну не понял я сначала, и что такого?..
Подпись находится в стадии разработки...

Конь
Постоялец
Постоялец
 
Сообщения: 650
Зарегистрирован: 02.06.2006 (Пт) 6:49
Откуда: г. Красноярск

Сообщение Конь » 13.06.2006 (Вт) 14:06

Да и вообще, у меня хреновато с API...
Подпись находится в стадии разработки...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 13.06.2006 (Вт) 14:34

А я и не наезжаю... я

Я писал(а):Некототорые Люди имеют обыкновение копипастить примеры которые делают совсем не то... что нужно....


это я не протебя, а про тех кто дал тебе пример который делает не растворение а слайдинг... и вообще у меня особое отношение к новичками...
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Lumen
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 841
Зарегистрирован: 03.12.2005 (Сб) 16:09
Откуда: Брянск

Сообщение Lumen » 13.06.2006 (Вт) 14:53

Да, я скопипастил пример из API Guide, но там же все константы есть, какие нужно использовать, неужели сложно догадаться передать другие параметры этой функции, если не получается с тем что есть? Может ещё и прогу за других написать?
Почему в API Guide нету примеров анимации затухания окна, разворачивания слева направо, из центра, а есть только этот, с сворачиванием в левый нижний угол, а также присутствуют все возможные константы и, самое главное, описания того, что они дают?
Подпись проходит рефакторинг

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 13.06.2006 (Вт) 16:04

Итак... я попытался помочь бедному человеку в реализации спецэффекта, в качетсве благодарности я получил 3 наезда, в том числе и от человека, которму я помогал:

Конь писал(а):Хакер
Ну не понял я сначала, и что такого?..


Twister писал(а):Что за привычка писать Declaration функции? Я ее тоже знаю и что?


Lumen писал(а):Да, я скопипастил пример из API Guide, но там же все константы есть, какие нужно использовать, неужели сложно догадаться передать другие параметры этой функции, если не получается с тем что есть? Может ещё и прогу за других написать?
Почему в API Guide нету примеров анимации затухания окна, разворачивания слева направо, из центра, а есть только этот, с сворачиванием в левый нижний угол, а также присутствуют все возможные константы и, самое главное, описания того, что они дают?


идея всех 3 квотингов - в том что я не прав...

и только не пишите сюда пожалуйста, что это не наезды...

получается, что лучше вообще никому не помогать... :cry:
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Lumen
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 841
Зарегистрирован: 03.12.2005 (Сб) 16:09
Откуда: Брянск

Сообщение Lumen » 13.06.2006 (Вт) 16:18

Хакер
Всё-таки я это сделаю. Это не наезд. :)
Я к тому это всё написал, что нужно немного думать, когда чужой код вставляешь, а не просто брать, что есть.
Тем более я не говорил, что ты неправ...
Если чем-то обидел - извини.
Подпись проходит рефакторинг

Конь
Постоялец
Постоялец
 
Сообщения: 650
Зарегистрирован: 02.06.2006 (Пт) 6:49
Откуда: г. Красноярск

Сообщение Конь » 14.06.2006 (Ср) 11:27

Хакер
Ты мне уже помогал, и неоднократно)

Вот только в следующий раз пиши, как ентим пользоваться:)
P.S.: Это не наезд, а пожелание;)
Подпись находится в стадии разработки...

Gotha
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 106
Зарегистрирован: 20.04.2006 (Чт) 10:55
Откуда: Красногорск

Сообщение Gotha » 14.06.2006 (Ср) 11:33

эх вы, критики) Хакер, маладец!) новички тоже разные бывают, одним интересен только результат а другим интересна реализация
зы. сори за оффтоп :oops:
Du stirbst. Besitz stirbt.
Die Sippen sterben.
Der einzig lebt - wir wissen es
Der Toten Tatenruhm.

Dangerous
Новичок
Новичок
Аватара пользователя
 
Сообщения: 45
Зарегистрирован: 25.05.2006 (Чт) 15:52

Сообщение Dangerous » 15.06.2006 (Чт) 20:08

Можно сделать поинтересней!!!
Хоть мучится больше и метод довольно приметивный, но можно по своему установить появление!
Ход работы:
1. Создайте новый проект
2. Добавьте в проект новый модуль
3. Добавьте в модуль следующий код:
Код: Выделить всё
'API функции

'Функция определяет стиль окна
Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
'Функция задаёт стиль окна
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
'Функция делает окно прозрачным
Public Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hWnd As Long, _
ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
'Константы
Public Const LWA_COLORKEY = &H1
Public Const LWA_ALPHA = &H2
Public Const GWL_EXSTYLE = (-20)
Public Const WS_EX_LAYERED = &H80000

'Процедура

'hWnd - манипулятор окна, Layered - степень прозрачности от 0 до 255
Public Sub SetTransparent(hWnd As Long, Layered As Byte)
Dim Ret As Long
'Определяем стиль нужного окна
Ret = GetWindowLong(hWnd, GWL_EXSTYLE)
'Задаём стиль окна как заслоённый
Ret = Ret Or WS_EX_LAYERED
SetWindowLong hWnd, GWL_EXSTYLE, Ret
'Задём степень прозрачности окна
SetLayeredWindowAttributes hWnd, 0, Layered, LWA_ALPHA
End Sub

4. Сохраните модуль, и можно его добавлять к разным формам.

--Применение--

1. Чтобы использовать модуль, в событии загрузки забей:
Код: Выделить всё
SetTransparent Me.hWnd, 210

это даст прозрачную форму(210 означает степень прозрачности).
Но нам надо не это! На свою форму кинь таймер с интервалом=10
и 1 невидимый текс бокс.
Код: Выделить всё
' при запуске форма будет прозрачной
Private Sub Form_Load()
SetTransparent Me.hWnd, 0
Text1.Text = 2
End Sub
' таймер при запуске будет медленно увеличивать видимость
Private Sub Timer1_Timer()
Text1.Text = Text1.Text + 2 ' за место двойки можно поставить и больше(это ускорит процесс появления)
If Text1.Text >= 210 Then Timer1.Enabled = False 'максимальное значение 255
SetTransparent Me.hWnd, (Text1.Text)
End Sub
Нет ничего невозможного...

Lumen
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 841
Зарегистрирован: 03.12.2005 (Сб) 16:09
Откуда: Брянск

Сообщение Lumen » 15.06.2006 (Чт) 22:30

Dangerious
Этот код не будет работать в Windows 98/ME. Хотя тоже оригинальное решение.
Подпись проходит рефакторинг

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 16.06.2006 (Пт) 8:27

Dangerous, а ты не считаешь, что вместо текстового поля лучше использовать приватные (или статические) переменные?
Lasciate ogni speranza, voi ch'entrate.

Dangerous
Новичок
Новичок
Аватара пользователя
 
Сообщения: 45
Зарегистрирован: 25.05.2006 (Чт) 15:52

Сообщение Dangerous » 16.06.2006 (Пт) 9:06

alibek
Я в этом деле новичёк. Просто мне так удобней и приватными и статическими переменными толком пользоваться неумею.
Был бы очень благодарен если ты мне приведёшь пример того как это сделать!?
Lumen
На счёт Win98 или линолиума: А ты мне скажи кто им пользуется?
Я конечно не против его использования, но кому он нужен!?
Нет ничего невозможного...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 16.06.2006 (Пт) 9:09

Ты говоришь, что примерно год учишься программированию.
При этом ты не знаешь, как пользоваться переменными.
Эти два факта не могут никак уложиться в моей голове одновременно.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Dangerous
Новичок
Новичок
Аватара пользователя
 
Сообщения: 45
Зарегистрирован: 25.05.2006 (Чт) 15:52

Сообщение Dangerous » 16.06.2006 (Пт) 9:13

GSerg
Ты нетак меня понял.
Я путаюсь в переменных(я занимаюсь программированием не так часто). А на счёт текст бокса: так мне удебней, например имя ему дал-vid и поставил видимым, и можно наблюдать за процессом появления.
Нет ничего невозможного...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 16.06.2006 (Пт) 9:14

Ты написал, что изучаешь VB уже год.
За это время, при желании, можно легко было додуматься до (например) такого:
Код: Выделить всё
Option Explicit
...
Private varClock As Long
Private Const FadeClock As Long = 3000
...
Private Sub Form_Load()
  SetTransparent Me.hWnd, 0
  varClock = 0
  Timer1.Enabled = True
End Sub
...
Private Sub Timer1_Timer()
  Dim T As Long
  varClock = varClock + Timer1.Interval
  T = 255& * (varClock / FadeClock)
  If T > 255 Then T = 255
  SetTransparent Me.hWnd, T
  If varClock => FadeClock Then
    Timer1.Enabled = False
    varClock = 0
  End If
End Sub
Lasciate ogni speranza, voi ch'entrate.

Dangerous
Новичок
Новичок
Аватара пользователя
 
Сообщения: 45
Зарегистрирован: 25.05.2006 (Чт) 15:52

Сообщение Dangerous » 16.06.2006 (Пт) 10:22

alibek
Если ты читал мой метод то наверно ты пропустил в начале надпись: "метод довольно приметивный".
Я в курсе про другие методы.
Нет ничего невозможного...

Конь
Постоялец
Постоялец
 
Сообщения: 650
Зарегистрирован: 02.06.2006 (Пт) 6:49
Откуда: г. Красноярск

Сообщение Конь » 16.06.2006 (Пт) 11:18

Оффтоп пошел...
Подпись находится в стадии разработки...

Dangerous
Новичок
Новичок
Аватара пользователя
 
Сообщения: 45
Зарегистрирован: 25.05.2006 (Чт) 15:52

Сообщение Dangerous » 16.06.2006 (Пт) 11:26

Конь прав - давайте по теме!
Нет ничего невозможного...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 16.06.2006 (Пт) 11:30

ещё, как вариант, - сделать скриншот, экрана за формой, а потом заюзать ф-цию AlphaBlend из msimg32.dll

Это будет работать везде... (так делает к примеру Photoshop)
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Конь
Постоялец
Постоялец
 
Сообщения: 650
Зарегистрирован: 02.06.2006 (Пт) 6:49
Откуда: г. Красноярск

Сообщение Конь » 16.06.2006 (Пт) 11:45

Хакер
Раскрой, плз тему! Интересно.

1. Как делать скриншот?
2. Как пользоваться AlphaBlend?
Подпись находится в стадии разработки...

Конь
Постоялец
Постоялец
 
Сообщения: 650
Зарегистрирован: 02.06.2006 (Пт) 6:49
Откуда: г. Красноярск

Сообщение Конь » 16.06.2006 (Пт) 11:47

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

След.

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

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

Сейчас этот форум просматривают: Google-бот и гости: 102

    TopList