[EO] Criando Janelas Transparentes Hitskin_logo Hitskin.com

Isto é uma pré-visualização de um tema em Hitskin.com
Instalar o temaVoltar para a ficha do tema

Aldeia RPG
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

[EO] Criando Janelas Transparentes

Ir para baixo

[EO] Criando Janelas Transparentes Empty [EO] Criando Janelas Transparentes

Mensagem por Valentine Dom Fev 13, 2011 12:05 am

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.

[EO] Criando Janelas Transparentes Fade01

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.

[EO] Criando Janelas Transparentes Fade02

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
Valentine
Valentine
Administrador
Administrador

Medalhas : [EO] Criando Janelas Transparentes ZgLkiRU
Mensagens : 5345
Créditos : 1164

https://www.aldeiarpg.com/

Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos