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
            Access: ocultar Access
            02/02/2022
            Access: orden de tabulación en formularios
            03/02/2022
            Mostrar todos

            Access: bloquear cerrar Access

            Publicado por Luis Viadel
            Categorías
            • Destellos formativos
            Etiquetas
            • Access
            • API
            • VBA
            'Declarar a nivel de módulo
            Public Declare PtrSafe Function apiGetSystemMenu Lib "USER32" Alias "GetSystemMenu" (ByVal hwnd As Long, ByVal flag As Long) As Long
            Public Declare PtrSafe Function apiEnableMenuItem Lib "USER32" Alias "EnableMenuItem" (ByVal hMenu As Long, ByVal wIDEnableMenuItem As Long, ByVal wEnable As Long) As Long
            
            Const MF_BYCOMMAND = &H0&
            Const MF_DISABLED = &H2&
            Const MF_ENABLED = &H0&
            Const MF_GRAYED = &H1&
            Const SC_CLOSE = &HF060&
            Const SWP_NOSIZE = &H1
            Const SWP_NOZORDER = &H4
            Const SWP_NOMOVE = &H2
            Const SWP_FRAMECHANGED = &H20
            Const WS_MINIMIZEBOX = &H20000
            Const WS_MAXIMIZEBOX = &H10000
            Const WS_SYSMENU = &H80000
            
            Function ActivarBotonCerrar(bEnable As Boolean, Optional ByVal lhWndTarget As Long = 0) As Long
            '-----------------------------------------------------------------------------------------------------------------------------------------------
            ' Fuente            : https://access-global.net/access-bloquear-cerrar-access/
            '-----------------------------------------------------------------------------------------------------------------------------------------------
            ' Título original   : EnableDisableCloseButton
            ' Autor original    : Desconocido
            ' Adaptado por      : Luis Viadel
            ' Actualizado       : abril 2010
            ' Propósito         : Impedir el cierre de la aplicación de forma accidental
            ' Retorno           : valor long de la acción
            ' Argumento/s       : La sintaxis del procedimiento o función consta del siguiente argumento:
            '                     Parte                 Modo           Descripción
            '-----------------------------------------------------------------------------------------------------------------------------------------------
            '                     bEnable           Obligatorio        El valor Boolean especifica si queremos bloquear el botón (false) o activarlo (true)
            '                     lhWndTarget       Opcional           Hace referencia a la ventana de Access en la que queremos actuar
            '-----------------------------------------------------------------------------------------------------------------------------------------------
            '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. Descomentar la línea que nos interese y pulsar F5 para ver su funcionamiento.
            '
            'Sub ActivarBotonCerrar_test()
            '
            '    ActivarBotonCerrar False
            '
            'End Sub
            '-----------------------------------------------------------------------------------------------------------------------------------------------
            
            Dim lhWndMenu As Long
            Dim lReturnVal As Long
            Dim lAction As Long
            
            Const wFlags = SWP_NOSIZE + SWP_NOZORDER + SWP_FRAMECHANGED + SWP_NOMOVE
            Const FLAGS_COMBI = WS_MINIMIZEBOX Or WS_MAXIMIZEBOX Or WS_SYSMENU
            
            lhWndMenu = apiGetSystemMenu(IIf(lhWndTarget = 0, Application.hWndAccessApp, lhWndTarget), False)
            
            If lhWndMenu <> 0 Then
              If bEnable Then
                lAction = MF_BYCOMMAND Or MF_ENABLED
              Else
                lAction = MF_BYCOMMAND Or MF_DISABLED Or MF_GRAYED
              End If
              lReturnVal = apiEnableMenuItem(lhWndMenu, SC_CLOSE, lAction)
            End If
            
            ActivarBotonCerrar = lReturnVal
            
            End Function
            
            
            ¡Ver en Github!
            Compartir
            19
            Luis Viadel
            Luis Viadel

            Entradas relacionadas

            30/03/2023

            Tratamiento de errores: compilación condicional


            Leer más
            29/03/2023

            Tratamiento de errores: errores personalizados


            Leer más
            28/03/2023

            Tratamiento de errores: Resume


            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: compilación condicional
              30/03/2023
            • 0
              Tratamiento de errores: errores personalizados
              29/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