Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: Прозрачность формы Добавлено: 08.11.04 18:58  

Автор вопроса:  Black Dragon | Web-сайт: в разработке | ICQ: 321186096 
Можно в XP как-нибудь сделать форму более-менее прозрачной?

Ответить

  Ответы Всего ответов: 16  

Номер ответа: 1
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #1
Добавлено: 08.11.04 20:19
Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hWnd As Long, ByVal crey As Byte, ByVal bAlpha As Byte, ByVal dwFlags 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 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-сайт: hw.t-k.ru
 Профиль | | #5
Добавлено: 10.11.04 14:51
А причем тут клиент !?

Ответить

Номер ответа: 6
Автор ответа:
 ZagZag



ICQ: 295002202 

Вопросов: 87
Ответов: 1684
 Профиль | | #6 Добавлено: 10.11.04 15:34
' Проект     :  OfflineClient
' Процедура  :  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-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #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-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #10
Добавлено: 11.11.04 17:04
Слегка модифицировал код функции sne и получилось:
Public Sub TranspMe(ByVal lngHandle As Long, ByVal Persent As Integer, R As Byte, G As Byte, B As Byte)  ' Полупрозрачность цветного участка на форме
    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-сайт: hw.t-k.ru
 Профиль | | #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-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #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-сайт: hw.t-k.ru
 Профиль | | #14
Добавлено: 11.11.04 19:52
пример есть но он без альфа-блэндинга... Т.к. он там попросту никчему, т.к. это SplashScreen от OfflineClient'a :)

Т.ч. имеем терпение подождать две недельки... ну или чуть больше с нынешними-то темпами, желанием и свободным временем участников :(

Говорят что исходники будут открыты...

Ответить

Номер ответа: 15
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #15
Добавлено: 11.11.04 19:55
PS
На RSDN есть неплохая статья по получению прозрачности... в том числе и частичной с пом AlphaBlend...

Работает все это чудо начиная с 98, ну да я думаю мало кто всерьез сейчас использует 95 окошки...

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам