USERFORM TRANSPARENTE - MOUSE MOVIE
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....
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....
Saudações...
Se puder ser uma tabajara soluction...
Insira um frame no userform e use o evento mousemove.
Anexo segue um exemplo.
Abraço
Se puder ser uma tabajara soluction...
Insira um frame no userform e use o evento mousemove.
Anexo segue um exemplo.
Abraço
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?
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)
[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)
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
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
Veja o meu exemplo.
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?.
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.
Ok. Muito Obrigado Robiu.
Tópico encerrado , respostas não são mais permitidas