Logo_Access_global_380x114Favicon_Access_global_180x180Logo_Access_global_380x114Logo_Access_global_380x114
  • Home
  • University
    • Destellos formativos
  • Labs
  • TV
  • Secciones
    • El mundo de Access
    • Explorando VBA
      • Artículos sobre VBA
      • Un trocito de código
    • Entrevistas
      • Profesionales de Access
    • El rincón de Excel
    • Bases de datos
      • MS SQL
      • MySQL
      • postgreSQL
      • SQLite
    • Clases magistrales
    • Utilidades hechas con Access
  • Access en el mundo
  • ¿Quiénes somos?
  • Cómo colaborar
  • Eventos
✕
            No hay resultados Mostrar todos los resultados
            Diseño: mi logo sustituye al de Access
            12/01/2022
            Access: centro de confianza
            13/01/2022
            Mostrar todos

            Aplicar transparencia a un formulario

            Publicado por Luis Viadel
            Categorías
            • Un trocito de código
            Etiquetas
            • API
            • Formulario
            • VBA
            • Windows

            Este trocito de código te permitirá aplicar transparencia a un formulario en un rango entre 1 (no hay transparencia) a 255 (totalmente transparente). Puede resultar muy útil para superponer dos fomularios y que ambos sean visibles. Para hacerlo vamos a utilizar la API de Windows para identificar el formulario y cambiarle sus atributos.


            Nivel: Avanzado

            ¿Cómo funciona?
            A través de una función a la que hemos llamado Aplicar_Transparencia, podemos invocarla desde cualquier formulario para cambiar su transparencia.

            Elementos que necesitas para poder ejecutar el código:

            1. Un formulario cualquiera
            2. API de Windows: GetWindowLong, SetWindowLong, SetLayeredWindowAttributes


            Código:
            'Escribe en un módulo cualquiera
            Public Declare PtrSafe Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
            Public Declare PtrSafe Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
            Public Declare PtrSafe Function SetLayeredWindowAttributes Lib "user32" (ByVal hWnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal wFlags As Long) As Long
            Public Declare PtrSafe Function SystemParametersInfo Lib "user32.dll" Alias "SystemParametersInfoA" (ByVal uiAction As Long, ByVal uiParam As Long, pvParam As Any, ByVal fwinIni As Long) As Long
            
            Public Const GWL_EXSTYLE = (-20)
            Public Const LWA_ALPHA = &H2
            Public Const WS_EX_LAYERED = &H80000
            
            Public Function Aplicar_Transparencia(ByVal hWnd As Long, valor As Byte) As Long
            '-----------------------------------------------------------------------------------------------------------------------------------------------
            ' Fuente            : https://access-global.net/aplicar-transparencia-a-un-formulario
            '-----------------------------------------------------------------------------------------------------------------------------------------------
            ' Título            : Aplicar transparencia
            ' Autor original    : Desconocido
            ' Adaptado por      : Luis Viadel
            ' Actualizado       : febrero 2015
            ' Propósito         : Aplicar un grado de transparencia a un form con valores entre 1 y 255 utilizando la API de Windows
            ' Retorno           : Valor long de la transparencia
            '                     0 equivale a que se aplica transparencia según se ha seleccionado
            '                     1 equivale a sin transparencia por valores fuera de rango
            '                     2 se ha producido un error y no se aplica transparencia
            ' Argumento/s       : La sintaxis de la función consta de los siguientes argumentos:
            '                     Parte                 Modo           Descripción
            '-----------------------------------------------------------------------------------------------------------------------------------------------
            '                     hWnd              Obligatorio        Identificador de windows del objeto formulario
            '                     valor                Obligatorio        Grado de transparencia (entre 1 y 255)
            '-----------------------------------------------------------------------------------------------------------------------------------------------
            'Test:              : Para adaptar este código en tu aplicación puedes basarte en este procedimiento test. Copiar el bloque siguiente al
            '                     portapapeles y pega en el editor de VBA en el evento de carga de cualquier formulario que desees.
            '
            '                     Private Sub Form_load()
            '
            '                         Call Aplicar_Transparencia(Me.hWnd, 120)
            '
            '                      End Sub
            '-----------------------------------------------------------------------------------------------------------------------------------------------
            
            Dim Msg As Long
            
            On Error Resume Next
            If valor < 0 Or valor > 255 Then
                Aplicar_Transparencia = 1
            Else
                Msg = GetWindowLong(hWnd, GWL_EXSTYLE)
                Msg = Msg Or WS_EX_LAYERED
                
                SetWindowLong hWnd, GWL_EXSTYLE, Msg
                SetLayeredWindowAttributes hWnd, 0, valor, LWA_ALPHA
                
                Aplicar_Transparencia = 0
            End If
            
            If Err Then
                Aplicar_Transparencia = 2
            End If
                
            End Function
            
            
            Ver en el repositorio
            Compartir
            0
            Luis Viadel
            Luis Viadel

            Entradas relacionadas

            19/03/2023

            Función que convierte cualquier carácter a texto puramente ASCII (Access VBA)


            Leer más
            24/03/2022

            Obtener la fecha del primer día de la semana o último día de la semana en Access VBA


            Leer más
            11/03/2022

            Actualizar una conexión ODBC en tiempo de ejecución


            Leer más

            Deja una respuesta Cancelar la respuesta

            Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

            ETIQUETAS

            Access API BD Botones ComboBox Consultas CountOfLines CStr Diseño DoCmd Excel Exportar Fecha FileSystemObject Filtros For Each...Next Formulario Formularios Funciones Funciones de dominio GetFolder GetWindowRect Google maps Informes InStr Kill Left Listbox Mid Módulos Node ProcCountLines Procedimientos ProcOfLine References Replace Ribbon RunCommand Seguridad Split SysCmd Tablas TreeView VBA VBIDE

            ÚLTIMAS ENTRADAS

            • 0
              Tratamiento de errores: otras herramientas útiles
              31/03/2023
            • 0
              Tratamiento de errores: compilación condicional
              30/03/2023

            ¿QUIERES PUBLICITAR TU EMPRESA AQUÍ?

            SUSCRÍBETE A NUESTRO
            NEWSLETTER

            Recibirás información puntual sobre el mundo de Access y VBA

            ¡Próximamente!

            Promovemos el uso de Access y de la programación en VBA en todo el mundo

            Centro de conocimiento


            Toda la sabiduría de los mejores programadores de Access y VBA a tu alcance.

            Legal

            Política de privacidad

            Condiciones de uso

            Condiciones del redactor

            ®Access Global 2021 | All right reserved
                      No hay resultados Mostrar todos los resultados