A transparência é a capacidade de ser transparente, ou seja, de permitir ver através, neste caso, do objecto. Esta transparência permite criar formulários que deixam ver através dele, que abrem com um efeito fade in (começar a aparecer até ficar opaco) ou fade out (do opaco ao invisível). Estas são algumas aplicações possíveis, que para além de um efeito bonito, melhoram o visual da aplicação.
O design de uma aplicação é muito importante e o seu sucesso pode também ser o sucesso da aplicação. Uma aplicação por muito boa que esteja (funcional), dificilmente vende ou convence se não tiver um bom design.
O VB.NET já inclui esta propriedade nos Forms mas o VB6 não e para a criarmos necessitamos de recorrer a alguns API’s. O API que permite este efeito é o SetLayeredWindowAttributes() embora se utilizem outros auxiliares, como é o caso das funções GetWindowLong() e SetWindowLong().
Para tornarmos um form transparente necessitamos do seguinte código (embora apenas seja usado o Sub MakeTransparent() e não o MakeOpaque() que “apenas” transforma o form em opaco):
No módulo:
Depois, na inicialização do Form:
O valor a indicar pode variar entre 0 e 255, onde 0 é o máximo de transparência.
Este exemplo mostra como iniciar um Form transparente, mas pode-se criar um efeito mais interessante onde o Form começa a aparecer até ficar opaco – fade in. Para criar este efeito é apenas necessário adicionar um Timer ao Form e utilizar o seguinte código:
Outra das aplicações que esta função permite, com umas pequenas alterações, é dizer que apenas uma cor ficará transparente. Ora isto permite colocar um controlo dentro do form e dizer que este é transparente criando uma janela ou um formato diferente.
Um exemplo engraçado para mostrar a sua implementação é criar algo parecido com um queijo. É apenas necessário colocar umas shapes no Form, formatá-las e definir no Form BorderStyle = None. Depois o código:
Finalmente no Sub MakeTransparent() alterar a seguinte linha, de modo a transformar tudo o que está a verde (vbGreen) em invisível.
De:
Para:
São pequenos exemplos de como usar a transparência nos Forms e como criar alguns efeitos interessantes.
Se não entendeu a aula, você pode baixar as demos que eu fiz
Tirando Cor de Fundo da Janela
Cor Transparente
Deixando a janela transparente
Janela Transparente
Retirado do site:
Vbtuga Blogspot
O design de uma aplicação é muito importante e o seu sucesso pode também ser o sucesso da aplicação. Uma aplicação por muito boa que esteja (funcional), dificilmente vende ou convence se não tiver um bom design.
O VB.NET já inclui esta propriedade nos Forms mas o VB6 não e para a criarmos necessitamos de recorrer a alguns API’s. O API que permite este efeito é o SetLayeredWindowAttributes() embora se utilizem outros auxiliares, como é o caso das funções GetWindowLong() e SetWindowLong().
Para tornarmos um form transparente necessitamos do seguinte código (embora apenas seja usado o Sub MakeTransparent() e não o MakeOpaque() que “apenas” transforma o form em opaco):
No módulo:
- Código:
' Declaração de API's necessários
Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hWnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex 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
' Definição de constantes
Private Const GWL_EXSTYLE = (-20)
Private Const LWA_COLORKEY = &H1
Private Const LWA_ALPHA = &H2
Private Const ULW_COLORKEY = &H1
Private Const ULW_ALPHA = &H2
Private Const ULW_OPAQUE = &H4
Private Const WS_EX_LAYERED = &H80000
' Define o Form como transparente
Public Sub MakeTransparent(ByVal hWnd As Long, ByVal bAlpha As Integer)
Dim msg As Long
' Ignora possíveis erros
On Error Resume Next
' Caso o valor seja inferior a 255 e superior
' a 0 aplica uma nova transparência
If bAlpha > 0 Or bAlpha < 255 Then
msg = GetWindowLong(hWnd, GWL_EXSTYLE)
msg = msg Or WS_EX_LAYERED
SetWindowLong hWnd, GWL_EXSTYLE, msg
SetLayeredWindowAttributes hWnd, 0, bAlpha, LWA_ALPHA
End If
End Sub
' Define o form com opaco
Public Sub MakeOpaque(ByVal hWnd As Long)
Dim msg As Long
' Ignora possíveis erros
On Error Resume Next
msg = GetWindowLong(hWnd, GWL_EXSTYLE)
msg = msg And Not WS_EX_LAYERED
SetWindowLong hWnd, GWL_EXSTYLE, msg
SetLayeredWindowAttributes hWnd, 0, 0, LWA_ALPHA
End Sub
Depois, na inicialização do Form:
- Código:
Private Sub Form_Initialize()
MakeTransparent Me.hWnd, 150
End Sub
O valor a indicar pode variar entre 0 e 255, onde 0 é o máximo de transparência.
Este exemplo mostra como iniciar um Form transparente, mas pode-se criar um efeito mais interessante onde o Form começa a aparecer até ficar opaco – fade in. Para criar este efeito é apenas necessário adicionar um Timer ao Form e utilizar o seguinte código:
- Código:
' Variável que irá guardar o valor da transparência
Private i As Integer
' Inicializa o form como transparente
Private Sub Form_Initialize()
MakeTransparent(Me.hWnd, 0)
End Sub
' No intervalo definido
Private Sub Timer1_Timer()
' Incrementa o valor da transparência
i = i + 10
' Caso não tenha atingido 255 define nova
' transparência, caso contrário pára o timer
If i <= 255 Then
MakeTransparent(Me.hWnd, i)
Else
Timer1.Enabled = False
End If
End Sub
' Definição do intervalo do timer e inicialização
Private Sub Form_Load()
Timer1.Interval = 100
Timer1.Enabled = True
End Sub
Outra das aplicações que esta função permite, com umas pequenas alterações, é dizer que apenas uma cor ficará transparente. Ora isto permite colocar um controlo dentro do form e dizer que este é transparente criando uma janela ou um formato diferente.
Um exemplo engraçado para mostrar a sua implementação é criar algo parecido com um queijo. É apenas necessário colocar umas shapes no Form, formatá-las e definir no Form BorderStyle = None. Depois o código:
- Código:
Private Sub Form_Load()
Dim ctrl As Control
' Definição de todas as shapes do Form com o fundo a
' verde, estilo opaco e com os limites a transparente
For Each ctrl In Me.Controls
If TypeOf ctrl Is Shape Then
ctrl.BackStyle = 1
ctrl.BackColor = vbGreen
ctrl.BorderStyle = 0
End If
Next
' Chamar a função que irá colocar
' tudo o que é verde como transparente
MakeTransparent Me.hWnd, 0
End Sub
Finalmente no Sub MakeTransparent() alterar a seguinte linha, de modo a transformar tudo o que está a verde (vbGreen) em invisível.
De:
- Código:
SetLayeredWindowAttributes hWnd, 0, bAlpha, LWA_ALPHA
Para:
- Código:
SetLayeredWindowAttributes hWnd, vbGreen, bAlpha, LWA_COLORKEY
São pequenos exemplos de como usar a transparência nos Forms e como criar alguns efeitos interessantes.
Se não entendeu a aula, você pode baixar as demos que eu fiz
Tirando Cor de Fundo da Janela
Cor Transparente
Deixando a janela transparente
Janela Transparente
Retirado do site:
Vbtuga Blogspot