Страница: 1 | 2 |
Вопрос: Прозрачность формы
Добавлено: 08.11.04 18:58
Автор вопроса: Black Dragon | Web-сайт:
Можно в XP как-нибудь сделать форму более-менее прозрачной?
Ответы
Всего ответов: 16
Номер ответа: 1
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #1
Добавлено: 08.11.04 20:19
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 GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
'--------------------------------------------------------------------------------
' Проект : OfflineClient
' Процедура : TranspMe
' Описание : Прозрачность для Win2k и выше
' Кем создан : SNE
' Дата-Время : 07.11.2004-19:11:25
'
' Параметры : lngHandle - хэндл окошка
' Persent - прозрачность в процентах
'--------------------------------------------------------------------------------
Public Sub TranspMe(ByVal lngHandle As Long, ByVal Persent As Integer) ' Прозрачность программы
Call SetWindowLong(lngHandle, &HFFEC, GetWindowLong(lngHandle, (&HFFEC)) Or &H80000)
Call SetLayeredWindowAttributes(lngHandle, cNull, (&HFF * (&H64 - Persent)) / &H64, &H2&
End Sub
Номер ответа: 2
Автор ответа:
Black Dragon
ICQ: 321186096
Вопросов: 30
Ответов: 347
Web-сайт:
Профиль | | #2
Добавлено: 09.11.04 22:43
Номер ответа: 3
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #3
Добавлено: 10.11.04 09:03
Только злоупотреблять этим не советую, прозрачность сильно тормозит работу машины.
Номер ответа: 4
Автор ответа:
ZagZag
ICQ: 295002202
Вопросов: 87
Ответов: 1684
Профиль | | #4
Добавлено: 10.11.04 14:33
Вопрос намного не в тему:
Накой OfflineClient нужна прозрачность формы?
...Вот полупрозрачная вставка где-нибудь с краешку...
Номер ответа: 5
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #5
Добавлено: 10.11.04 14:51
А причем тут клиент !?
Номер ответа: 6
Автор ответа:
ZagZag
ICQ: 295002202
Вопросов: 87
Ответов: 1684
Профиль | | #6
Добавлено: 10.11.04 15:34
' Процедура : TranspMe
' Описание : Прозрачность для Win2k и выше
' Кем создан : SNE
Сам не знаю...
Номер ответа: 7
Автор ответа:
Александр
Разработчик Offline Client
ICQ: 204034
Вопросов: 106
Ответов: 1919
Профиль | | #7
Добавлено: 11.11.04 15:32
Накой OfflineClient нужна прозрачность формы?
Некоторые прутся от этого )
Номер ответа: 8
Автор ответа:
ZagZag
ICQ: 295002202
Вопросов: 87
Ответов: 1684
Профиль | | #8
Добавлено: 11.11.04 15:56
Ну я и говорю - я, лично, от прозрачности (или полупрозрачности ) совсем
уже не прусь! ...и не перся никогда
Видел, по-моему, оболочку для дисков журнала (не скажу какого ), дак там
была полупрозрачная вставка - смотрелось просто зашибись! Если уж решили
дизайнить OfflineClient, то поэкспериментируйте над таким эффектом...
Я так думаю что это две формы: одна главная с вырезанным прямоугольником, а
вторая - полупрозрачная (по крайней мере там где она видна) и лежит ровно
под главной
Ну ладно, не буду здесь про OfflineClient разводить разговор, но раз тема на
то наводит то это за оффтоп считать никак нельзя
Номер ответа: 9
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #9
Добавлено: 11.11.04 16:52
Я знаю, как это реализовано :Р Если подробно посмотреть на описание SetLayeredWindowAttributes, а именно на константу LWA_COLORKEY = &H1 составную dwFlags и
crKey - Pointer to a COLORREF value that specifies the transparency color key to be used when composing the layered window...
В общем слегка модифицируем код sne, предварительно рисуем на форме область нужного цвета и пролучаем... Как раз то, что надо! У меня даже примерчик в ExcelVBA UserForm имеется.
Номер ответа: 10
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #10
Добавлено: 11.11.04 17:04
Слегка модифицировал код функции sne и получилось:
Call SetWindowLong(lngHandle, &HFFEC, GetWindowLong(lngHandle, (&HFFEC)) Or &H80000)
Call SetLayeredWindowAttributes(lngHandle, RGB(R,G,B), (&HFF * (&H64 - Persent)) / &H64, &H2&
End Sub
R,G,B - ну, это сами понимаете, составные части цвета. На помент запуска функции форма должна быть уже прорисована с участком "того самого" цвета. Работающий пример в Excel могу желающим выслать.
Номер ответа: 11
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #11
Добавлено: 11.11.04 17:18
Прозрачность цвета можно реализовать с пом. TransparentBlt, полупрозрачность, с пом. AlphaBlend...
А для формы полупрозрачность цвета можно сделать с пом. копирования на форму раб. стола, после чего с помощью выше написанных функций получить полупрозрачность...
Номер ответа: 12
Автор ответа:
ZagZag
ICQ: 295002202
Вопросов: 87
Ответов: 1684
Профиль | | #12
Добавлено: 11.11.04 17:28
2mc-black:
У меня от твоего примера форма либо вся принимает процент прозрачности, либо
(Меняю последний параметр SetLayeredWindowAttributes на &H1)
Ты что? Значения методом тыка подбирал?
Пачиму, панимаещ, не ставищ константы?
Если не в лом, вышли рабочий пример на zagzag2003@mail.ru я его посмотрю
Номер ответа: 13
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #13
Добавлено: 11.11.04 18:18
sne, а пример можно привести тут? Все-таки, то, что я написал выше - не совсем то, правда работает, но по-другому.
Константы я приводить не стал, т.к. и sne не стал, я же его пример передирал:
Const LWA_ALPHA = &H2
Const LWA_COLORKEY = &H1
будет работать с LWA_ALPHA Or LWA_ALPHA = &H3, правильно?
Все-таки мой пример дает не тот эффект, что требовался, но весьма оригинально
Номер ответа: 14
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #14
Добавлено: 11.11.04 19:52
пример есть но он без альфа-блэндинга... Т.к. он там попросту никчему, т.к. это SplashScreen от OfflineClient'a
Т.ч. имеем терпение подождать две недельки... ну или чуть больше с нынешними-то темпами, желанием и свободным временем участников
Говорят что исходники будут открыты...
Номер ответа: 15
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #15
Добавлено: 11.11.04 19:55
PS
На RSDN есть неплохая статья по получению прозрачности... в том числе и частичной с пом AlphaBlend...
Работает все это чудо начиная с 98, ну да я думаю мало кто всерьез сейчас использует 95 окошки...