USERFORM TRANSPARENTE - MOUSE MOVIE

PABLOMOREIRAGV 14/11/2011 08:49:07
#389113
Olá amigos,

Eu peguei um exemplo postado em uma comunidade do orkut que se trata de como fazer com que um Userform fique transparente. Porém estou tendo um probleminha.Baseado no exemplo eu consegui fazer com que o Userform ficasse transparente (até aí blz), só que eu tentei fazer com que quando o cursor passasse em cima do userform o mesmo voltasse ao normal, ou seja, ficasse com nitidez 100% (isso deu certo também), só que na hora que o cursor saí de cima ele não fica transparente novamente, pois o evento Mouse Move só funciona quando o cursor entra e não quando ele sai (o que eu acho até um defeito do VBA).
Tem alguém me ajudar nesta questão? Talvez conheçam uma forma que dê certo. Estou mandando um exemplo que anexo para ajudar a entender.Qual quer dúvida é só falar. Desde já agradeço.

Obrigado....
MITSUEDA 17/11/2011 08:10:12
#389263
Saudações...

Se puder ser uma tabajara soluction...

Insira um frame no userform e use o evento mousemove.

Anexo segue um exemplo.

Abraço
PABLOMOREIRAGV 17/11/2011 08:18:39
#389264
Quando uso o userform no showmodal = false, dá problema no código, ele faz com que até a planilha e o excel fique transparente. Tem como chamar a função apenas para o frame?
MITSUEDA 17/11/2011 13:13:33
#389287
Isso porque voce esta usando a API GetActiveWindows use a FindWindow

[txt-color=#0000f0]No seu modulo[/txt-color]

Private Declare Function FindWindow Lib [Ô]user32[Ô] Alias [Ô]FindWindowA[Ô] ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long

Private Declare Function SetWindowLong Lib [Ô]user32[Ô] Alias [Ô]SetWindowLongA[Ô] ( _
ByVal hwnd As Long, ByVal lngWinIdx As Long, _
ByVal dwNewLong As Long) As Long

Private Declare Function GetWindowLong Lib [Ô]user32[Ô] Alias [Ô]GetWindowLongA[Ô] ( _
ByVal hwnd As Long, ByVal lngWinIdx As Long) As Long

Private Declare Function SetLayeredWindowAttributes Lib [Ô]user32[Ô] ( _
ByVal hwnd As Long, ByVal crKey As Integer, _
ByVal bAlpha As Integer, ByVal dwFlags As Long) As Long

Private Const WS_EX_LAYERED = &H80000
Private Const LWA_COLORKEY = &H1
Private Const LWA_ALPHA = &H2
Private Const GWL_EXSTYLE = &HFFEC
Dim hwnd As Long


Public Sub Semitransparente(ByVal intLevel As Integer, ByVal strForm As String) [ô]userform transparente
Dim lngWinIdx As Long
Dim strClassName As String
strClassName = [Ô]ThunderDFrame[Ô]
hwnd = FindWindow(strClassName, strForm)
lngWinIdx = GetWindowLong(hwnd, GWL_EXSTYLE)
SetWindowLong hwnd, GWL_EXSTYLE, lngWinIdx Or WS_EX_LAYERED
SetLayeredWindowAttributes hwnd, 0, (255 * intLevel) / 100, LWA_ALPHA
End Sub

[txt-color=#0000f0]Na chamada do seu form[/txt-color]

Call Semitransparente(50, Me.Caption)
PABLOMOREIRAGV 17/11/2011 14:23:30
#389297
Testei aqui Fábio só que não mudou muita coisa. Eu precisaria usar este recurso com o show modal = false. E quando faço isso não dá certo. A idéia seria que ele ficasse transparente assim que perdesse o foco (apesar de não ter o evento lost focus) e quando o foco voltasse para o form o mesmo ficaria com a transparência de 100%. Existe alguma forma de fazer isso?
Resumindo, ele abriria transparente, caso o usuário clique ou passe o mouse sobre o form ele ficaria com a transparência de 100%, caso contrário 50%. Acho que é isso..rs.rs....

Obrigado
ROBIU 17/11/2011 15:13:09
#389301
Resposta escolhida
Veja o meu exemplo.
PABLOMOREIRAGV 17/11/2011 16:05:44
#389307
Blz, bom exemplo. Mas considerando o anexo, é a mas coisa, porém o usuário teria a mesma ação, ou seja, ao clicar na imagem de fundo da planilha ficaria transparente. Seria ao invés de clicar na célula de fundo, clicaria na imagem de fundo.Como faço?.
ROBIU 18/11/2011 08:53:24
#389354
então Click com o butão direito na picture e em Atribuir Macro. Deve aparecer uma rotina no módulo que vai executar quando clicar na picture. Aí coloca o código que é executado quando click na planilha.
PABLOMOREIRAGV 18/11/2011 10:26:34
#389369
Ok. Muito Obrigado Robiu.
Tópico encerrado , respostas não são mais permitidas