Быстрее, выше, сильнее (изменять прозрачность окон)

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

Быстрее, выше, сильнее (изменять прозрачность окон)

Сообщение MOV » 28.04.2005 (Чт) 16:56

В xp и 2k это можно делать и вобщем неплохо, но жутко медленно.
Прозрачность меняется от 0 до 255
Даже если таймер или sleep поставить на 1 миллисекунду, Autoredraw формы - False (меняю прозрачность с шагом 4) все равно долго получается, а хотелось бы с шагом 1, чтобы плавнее, но тогда совсем долго будет. Хотелось бы, чтобы от нуля до 255 за 0,5 секунды где-то. :?
Можно ли как-то ускорить процесс.

Код примерно такой:
Это в модуле:

Код: Выделить всё
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

Public Sub SetTransparent(hWnd As Long, ByVal 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


А это в форме (изначально visible формы false):

Код: Выделить всё
Private Sub Form_Load()
   On Error Resume Next
   SetTransparent Me.hWnd, 0
   Timer1.Enabled = True
   Me.Visible = True
End Sub

Private Sub Timer1_Timer()
    Static par As Integer
    If par > 254 Then Timer1.Enabled = False: Exit Sub
    SetTransparent Me.hWnd, par
    par = par + 4
End Sub

MOV
Постоялец
Постоялец
 
Сообщения: 414
Зарегистрирован: 13.03.2004 (Сб) 15:13
Откуда: Санкт-Петербург

Сообщение MOV » 28.04.2005 (Чт) 17:02

Если быть более точным, то:
- иногда запускаешь программу, все делается быстро и плавно, а иногда окно появляется медленно и с рывками почему так может быть? :?

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 29.04.2005 (Пт) 19:01

Недавно видел функцию AnimateWindow. Позволяет Анимировать окно, в том числе обеспечивает плавное растворение и появление. B API-Viewere её нет. Она работает даже в Win98 SE . Дома посмотрю --выложу.

FaKk2
El rebelde gurú
El rebelde gurú
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Сообщение FaKk2 » 29.04.2005 (Пт) 19:30

MOV
Возможно потому что, система прерывает процесс для выполнения других задач. Хотя она делает это быстро, но не достаточно.

Но, может я не прав.
Для получения ответа надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения.

MOV
Постоялец
Постоялец
 
Сообщения: 414
Зарегистрирован: 13.03.2004 (Сб) 15:13
Откуда: Санкт-Петербург

Сообщение MOV » 30.04.2005 (Сб) 7:42

AnimateWindow это почти одно и то же.
Да прерывается. Я тоже об это м думал. На форме есть еще три анимированных gifa, которые тоже надо обрабатывать. Попробую для чистоты экперимента их отключить, если тормоза остануться - значит из-за них. Но ведь бывает, что запускается нормально (при чем если один раз хотя бы удалось проге запуститься нормально плавно без рывков и быстро без тормозов, то потом она все время так загружается - какие-то виндовские штучки наверно, xp же хранит наверно инфу о последних юзаных прогах, чтобы потом быстрее их запустить правда точно в суть не вникал :? )

MOV
Постоялец
Постоялец
 
Сообщения: 414
Зарегистрирован: 13.03.2004 (Сб) 15:13
Откуда: Санкт-Петербург

Сообщение MOV » 30.04.2005 (Сб) 8:11

Нет все-таки анигифы не влияют. :(

drronnie
Постоялец
Постоялец
 
Сообщения: 793
Зарегистрирован: 04.03.2002 (Пн) 22:29
Откуда: Украина, Алчевск

Сообщение drronnie » 30.04.2005 (Сб) 15:58

На моей совести есть такая програма называется taskbartransparentcontrol, так вот, чем она занимается? Изменением прозрачности Панели задач... меняю прозрачность вражескогоо окна, всё рулит окейно... может правда форма сильно перегружена внешностью?
Компиляция - перевод словесного поноса в машинный код.

MOV
Постоялец
Постоялец
 
Сообщения: 414
Зарегистрирован: 13.03.2004 (Сб) 15:13
Откуда: Санкт-Петербург

Сообщение MOV » 30.04.2005 (Сб) 16:11

Да, видимо, все-таки перегружена. Поэтому от этой затеи придется отказаться. На ней порядка 10 image и порядка 23 pictures-ов правда все они не очень большие ну и плюс 3 небольших анигифа. Вроде и не так много. :?
Может как-то можно высвободить побольше памяти (видео)? :?
А так машина неплохая: Asus P4P800-VM/ Pent 2.6Ghz/ 512Mb (а вот видяха бортовая), может с нормальной видяхой и нормально было бы, но а здесь по идее если с умом, то если не хватает видеопамяти должна юзаться оперативка хотя в железе тоже не асс :oops: , но думаю, что так.

kirrun
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 06.04.2005 (Ср) 15:41
Откуда: Питер

Сообщение kirrun » 30.04.2005 (Сб) 20:37

У меня тоже всегда по-разному запускается.. правда там одновременно две формы появляются и исчезают... Но иногда очень шустренько так...
"Единственный безопасный компьютер - это тот, который выключен из электросети, закрыт в сейфе, который зарыт 20 футов под землей в засекреченной местности. И то я не уверен относительно его безопасности."
(Деннис Хьюджес, ФБР)


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

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

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

    TopList