** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Quitar boton cerrar
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoQuitar boton cerrar

 Responder Responder
Autor
Mensaje
okunova Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 27/Junio/2005
Localización: España
Estado: Sin conexión
Puntos: 369
Enlace directo a este mensaje Tema: Quitar boton cerrar
    Enviado: 02/Octubre/2015 a las 11:40
Hola he estado buscando la manera de quitar o deshabilitar los botones cerrar de la aplicacion y he encontrado el siguiente codigo en la pagina de un colaborador 
http://www.mvp-access.es/juanmafan/api/desactivarmenu.htm lo que pasa es que no se como se implementa alguien me puede indicar los pasos.

El codigo es el siguiente:

'*********************************************************
' DeleteMainMenu
'
' Rutina que desactiva las opciones del menú de la ventana
' principal de Access, como el botón cerrar, minimizar,
' etc.
' ' Argumentos
' ItemMenu: Opcional. Una cualquiera de las constantes
' declaradas más abajo, y que comienzan con el prefijo
' "SC_". Si no se pasa ningún argumento, la rutina
' desactivará todas las opciones
'

Private Declare Function GetSystemMenu _ Lib "user32" _ (ByVal hWnd As Long, _ ByVal bRevert As Long) As Long Private Declare Function DrawMenuBar _ Lib "user32" _ (ByVal hWnd As Long) As Long Private Declare Function DeleteMenu _ Lib "user32" _ (ByVal hMenu As Long, _ ByVal nPosition As Long, _ ByVal wFlags As Long) As Long

Public Const MF_BYCOMMAND = &H0& Public Const MF_BYPOSITION = &H400& ' Constante para la opción Cerrar
Public Const SC_CLOSE = &HF060 ' Constante para la opción Maximizar
Public Const SC_MAXIMIZE = &HF030 ' Constante para la opción Minimizar
Public Const SC_MINIMIZE = &HF020 ' Constante para la opción Mover
Public Const SC_MOVE = &HF010 ' Constante para la opción Restaurar
Public Const SC_RESTORE = &HF120 ' Constante para la opción Tamaño
Public Const SC_SIZE = &HF000 Public Sub DeleteMainMenu(Optional ItemMenu) Dim hMenu As Long ' obtenemos el identificador del menú de la ' ventana principal de Access hMenu = GetSystemMenu(Access.hWndAccessApp, False) If hMenu Then ' si no se le pasan argumentos a esta rutina ' entonces desactivara todas las opciones del menú If IsMissing(ItemMenu) Then ' deshabilita la opción "Maximizar" Call DeleteMenu(hMenu, SC_MAXIMIZE, MF_BYCOMMAND) ' deshabilita la opción "Minimizar" Call DeleteMenu(hMenu, SC_MINIMIZE, MF_BYCOMMAND) ' deshabilita la opción "Tamaño" Call DeleteMenu(hMenu, SC_SIZE, MF_BYCOMMAND) ' deshabilita la opción "Mover" Call DeleteMenu(hMenu, SC_MOVE, MF_BYCOMMAND) ' deshabilita la opción "Restaurar" Call DeleteMenu(hMenu, SC_RESTORE, MF_BYCOMMAND) ' deshabilita la opción "Cerrar" Call DeleteMenu(hMenu, SC_CLOSE, MF_BYCOMMAND) ' por último quitamos la barra separadora Call DeleteMenu(hMenu, 0, MF_BYPOSITION) Else ' deshabilita la opción indicada en ItemMenu Call DeleteMenu(hMenu, ItemMenu, MF_BYCOMMAND) End If ' Redibujamos botones y menú Call DrawMenuBar(Access.hWndAccessApp) End If End Sub '
' La siguiente rutina restaura el menú de la ventana
' principal de Access a su estado original '

Public Sub RestoreMainMenu() ' Habilita el menú a su estado original Call GetSystemMenu(Access.hWndAccessApp, True) Call DrawMenuBar(Access.hWndAccessApp) End Sub
'
' Si queremos desactivar del todo la opción "Cerrar" del
' programa, deberemos añadir en algún punto de nuestro
' código la siguiente instrucción, que deshabilitará la
' opción "Salir" del menú "Archivo"
'

CommandBars("Menu Bar"). _
Controls("Archivo"). _
Controls("Salir"). _
Enabled = False
'
' y eso es todo, amigos ;-)
'*********************************************************

Gracias un saludo

Edito: Es para access 2003


Editado por okunova - 02/Octubre/2015 a las 11:55
Arriba
mounir Ver desplegable
Colaborador
Colaborador


Unido: 09/Febrero/2009
Localización: Asturias-España
Estado: Sin conexión
Puntos: 5479
Enlace directo a este mensaje Enviado: 02/Octubre/2015 a las 12:22
Hola!

Mirate este enlace que te lo explica mas fácil.

Otra alternativa es crear una Macro con el nombre "autoexec", selecionando la acción Ejecutar Código y el enombre de la funcion del modulo.


y este ejemplo: https://sites.google.com/site/jjjt1973/Home/ocultar-el-boton-cerrar-y-desactivar-el-boton-minimizar-en-access-2007

La idea es la misma, crear modulos y llamrles o desde un formulario de inico o desde una Macro "autoexec", lo mismo lo podrías hacer con el código que posteaste inicialmente.

Editado por mounir - 02/Octubre/2015 a las 12:35
Un Saludo.
Arriba
okunova Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 27/Junio/2005
Localización: España
Estado: Sin conexión
Puntos: 369
Enlace directo a este mensaje Enviado: 02/Octubre/2015 a las 13:47
En access 2003 funcionaria igual?

Arriba
okunova Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 27/Junio/2005
Localización: España
Estado: Sin conexión
Puntos: 369
Enlace directo a este mensaje Enviado: 02/Octubre/2015 a las 15:27
Describo los pasos abro un modulo nuevo llamado mdlAutoexec en el que incluyo codigo cito:
'*********************************************************
' DeleteMainMenu
'
' Rutina que desactiva las opciones del menú de la ventana
' principal de Access, como el botón cerrar, minimizar,
' etc.
' ' Argumentos
' ItemMenu: Opcional. Una cualquiera de las constantes
' declaradas más abajo, y que comienzan con el prefijo
' "SC_". Si no se pasa ningún argumento, la rutina
' desactivará todas las opciones
'

Private Declare Function GetSystemMenu _ Lib "user32" _ (ByVal hWnd As Long, _ ByVal bRevert As Long) As Long Private Declare Function DrawMenuBar _ Lib "user32" _ (ByVal hWnd As Long) As Long Private Declare Function DeleteMenu _ Lib "user32" _ (ByVal hMenu As Long, _ ByVal nPosition As Long, _ ByVal wFlags As Long) As Long

Public Const MF_BYCOMMAND = &H0& Public Const MF_BYPOSITION = &H400& ' Constante para la opción Cerrar
Public Const SC_CLOSE = &HF060 ' Constante para la opción Maximizar
Public Const SC_MAXIMIZE = &HF030 ' Constante para la opción Minimizar
Public Const SC_MINIMIZE = &HF020 ' Constante para la opción Mover
Public Const SC_MOVE = &HF010 ' Constante para la opción Restaurar
Public Const SC_RESTORE = &HF120 ' Constante para la opción Tamaño
Public Const SC_SIZE = &HF000 Public Sub DeleteMainMenu(Optional ItemMenu) Dim hMenu As Long ' obtenemos el identificador del menú de la ' ventana principal de Access hMenu = GetSystemMenu(Access.hWndAccessApp, False) If hMenu Then ' si no se le pasan argumentos a esta rutina ' entonces desactivara todas las opciones del menú If IsMissing(ItemMenu) Then ' deshabilita la opción "Maximizar" Call DeleteMenu(hMenu, SC_MAXIMIZE, MF_BYCOMMAND) ' deshabilita la opción "Minimizar" Call DeleteMenu(hMenu, SC_MINIMIZE, MF_BYCOMMAND) ' deshabilita la opción "Tamaño" Call DeleteMenu(hMenu, SC_SIZE, MF_BYCOMMAND) ' deshabilita la opción "Mover" Call DeleteMenu(hMenu, SC_MOVE, MF_BYCOMMAND) ' deshabilita la opción "Restaurar" Call DeleteMenu(hMenu, SC_RESTORE, MF_BYCOMMAND) ' deshabilita la opción "Cerrar" Call DeleteMenu(hMenu, SC_CLOSE, MF_BYCOMMAND) ' por último quitamos la barra separadora Call DeleteMenu(hMenu, 0, MF_BYPOSITION) Else ' deshabilita la opción indicada en ItemMenu Call DeleteMenu(hMenu, ItemMenu, MF_BYCOMMAND) End If ' Redibujamos botones y menú Call DrawMenuBar(Access.hWndAccessApp) End If End Sub '
' La siguiente rutina restaura el menú de la ventana
' principal de Access a su estado original '

Public Sub RestoreMainMenu() ' Habilita el menú a su estado original Call GetSystemMenu(Access.hWndAccessApp, True) Call DrawMenuBar(Access.hWndAccessApp) End Sub
'
' Si queremos desactivar del todo la opción "Cerrar" del
' programa, deberemos añadir en algún punto de nuestro
' código la siguiente instrucción, que deshabilitará la
' opción "Salir" del menú "Archivo"
'

CommandBars("Menu Bar"). _
Controls("Archivo"). _
Controls("Salir"). _
Enabled = False
'
' y eso es todo, amigos ;-)
'*********************************************************
ahora desde el formulario inicial en el evento Al abrir le incluyo .........


Esta es la parte que no tengo clara
Arriba
mounir Ver desplegable
Colaborador
Colaborador


Unido: 09/Febrero/2009
Localización: Asturias-España
Estado: Sin conexión
Puntos: 5479
Enlace directo a este mensaje Enviado: 02/Octubre/2015 a las 15:47
Hola!
Los dos enlaces que te puse funcionan bien para lo que tu quieres.

Respecto al codigo que posteaste simplemente al abrir o al cargar el formulario pones el nombre de la función:

Private Sub Form_Load()
DeleteMainMenu
End Sub


Editado por mounir - 02/Octubre/2015 a las 15:47
Un Saludo.
Arriba
okunova Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 27/Junio/2005
Localización: España
Estado: Sin conexión
Puntos: 369
Enlace directo a este mensaje Enviado: 02/Octubre/2015 a las 16:06
Perfecto me soluciona el problema pero hay alguna forma de ocultarlos ya que con esto solo los deshabilito
Arriba
mounir Ver desplegable
Colaborador
Colaborador


Unido: 09/Febrero/2009
Localización: Asturias-España
Estado: Sin conexión
Puntos: 5479
Enlace directo a este mensaje Enviado: 02/Octubre/2015 a las 16:45
Hola!

Pega esto en un modulo en vez del otro código:

Private Declare Function GetSystemMenu Lib "user32" (ByVal hWnd As Long, _
    ByVal bRevert As Long) As Long

Private Declare Function EnableMenuItem Lib "user32" (ByVal hMenu As _
    Long, ByVal wIDEnableItem As Long, ByVal wEnable As Long) As Long

Const MF_GRAYED = &H1&
Const MF_BYCOMMAND = &H0&
Const SC_CLOSE = &HF060&

Public Function SetEnabledState(blnState As Boolean)
    Call CloseButtonState(blnState)
    Call ExitMenuState(blnState)
End Function

'Disable the Menu Option
Sub ExitMenuState(blnExitState As Boolean)
CommandBars("Menu Bar").Controls("Archivo").Controls("Salir").Enabled = True
End Sub

'Disable the Close Button Option
Sub CloseButtonState(boolClose As Boolean)
    Dim hWnd As Long
    Dim wFlags As Long
    Dim hMenu As Long
    Dim result As Long
       
    hWnd = Application.hWndAccessApp
    hMenu = GetSystemMenu(hWnd, 0)
    If Not boolClose Then
        wFlags = MF_BYCOMMAND Or MF_GRAYED
    Else
        wFlags = MF_BYCOMMAND And Not MF_GRAYED
    End If
    
    result = EnableMenuItem(hMenu, SC_CLOSE, wFlags)
End Sub


y en el evento Load del formulario:

Call SetEnabledState(False)



Editado por mounir - 02/Octubre/2015 a las 16:45
Un Saludo.
Arriba
okunova Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 27/Junio/2005
Localización: España
Estado: Sin conexión
Puntos: 369
Enlace directo a este mensaje Enviado: 02/Octubre/2015 a las 20:11
Hola no he notado diferencia ninguna sigue apareciendo los botones el de la X deshabilitada y el resto aparecen igual no han desaparecido ¿tenían que desaparecer?
Acuerdate que es 2003
Gracias por la respuesta


Editado por okunova - 02/Octubre/2015 a las 20:14
Arriba
mounir Ver desplegable
Colaborador
Colaborador


Unido: 09/Febrero/2009
Localización: Asturias-España
Estado: Sin conexión
Puntos: 5479
Enlace directo a este mensaje Enviado: 03/Octubre/2015 a las 12:31
Hola!

Pega el siguiente código en un Módulo:

Private Const GWL_EXSTYLE = (-20)
Private Const GWL_STYLE = (-16)
Private Const WS_MAXIMIZEBOX = &H10000
Private Const WS_MINIMIZEBOX = &H20000
Private Const WS_SYSMENU = &H80000
Private Const HWND_TOP = 0
Private Const SWP_NOMOVE = &H2
Private Const SWP_NOSIZE = &H1
Private Const SWP_FRAMECHANGED = &H20
Private Const SWP_DRAWFRAME = SWP_FRAMECHANGED
Private Declare Function SetWindowLong Lib "user32" _
Alias "SetWindowLongA" (ByVal hWnd As Long, _
ByVal nIndex As Long, ByVal dwNewLong 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 SetWindowPos Lib "user32" _
(ByVal hWnd As Long, ByVal hWndInsertAfter As Long, _
ByVal X As Long, ByVal Y As Long, ByVal cx As Long, _
ByVal cy As Long, ByVal wFlags As Long) As Long
'Ocultar Botón Cerrar(X)
Sub HideAccessCloseButton()
    Dim lngStyle As Long
    lngStyle = GetWindowLong(hWndAccessApp, GWL_STYLE)
    lngStyle = lngStyle And Not WS_SYSMENU
    Call SetWindowLong(hWndAccessApp, GWL_STYLE, lngStyle)
    Call SetWindowPos(hWndAccessApp, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE Or SWP_DRAWFRAME)
End Sub

'Mostrar Botón Cerrar (X)
Sub UnHideAccessCloseButton()

   Dim lngStyle As Long
   
   lngStyle = GetWindowLong(hWndAccessApp, GWL_STYLE)
   lngStyle = lngStyle Or WS_SYSMENU
   Call SetWindowLong(hWndAccessApp, GWL_STYLE, lngStyle)
   Call SetWindowPos(hWndAccessApp, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE Or SWP_DRAWFRAME)
   
End Sub


En el evento Load del formulario para Ocultar:-

HideAccessCloseButton


En el Evento UnLoad del Formulario Para Mostrar (Si quieres >>> Es opcional)

UnhideAccessCloseButton


PD: Debes borrar los otros códigos sobre todo del evento Load de formulario Inicio.

Suerte!!!!

Editado por mounir - 03/Octubre/2015 a las 12:54
Un Saludo.
Arriba
okunova Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 27/Junio/2005
Localización: España
Estado: Sin conexión
Puntos: 369
Enlace directo a este mensaje Enviado: 27/Enero/2016 a las 17:54
TEMA CERRADO

Arriba
E. Feijoo Ver desplegable
Moderador
Moderador


Unido: 16/Abril/2004
Localización: España
Estado: Sin conexión
Puntos: 19948
Enlace directo a este mensaje Enviado: 27/Enero/2016 a las 18:34
... aun NO, falta algo mas (indicado en las normas) y no son las gracias por lo que funciono y si no función por las molestias que se tomaron en responder ....
Arriba
okunova Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 27/Junio/2005
Localización: España
Estado: Sin conexión
Puntos: 369
Enlace directo a este mensaje Enviado: 27/Enero/2016 a las 20:02
Perdona si hice algo que no debería, pero creo que con la solución de mounir esta solucionado el tema de todas formas tienes razón que ni las gracias di, mea culpa sorry

GRACIAS por la ayuda
Arriba
E. Feijoo Ver desplegable
Moderador
Moderador


Unido: 16/Abril/2004
Localización: España
Estado: Sin conexión
Puntos: 19948
Enlace directo a este mensaje Enviado: 27/Enero/2016 a las 20:37
Lo que faltaba (y que es lo que seria útil a quien leyese este hilo) es que la solución proporcionada por Mounir funciono adecuadamente y soluciono el problema ... las gracias se corresponden con otra cuestión que no vale la pena comentar.
Arriba
okunova Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 27/Junio/2005
Localización: España
Estado: Sin conexión
Puntos: 369
Enlace directo a este mensaje Enviado: 27/Enero/2016 a las 22:09
Bueno la solucion es la siguiente gracias a mounir:

Private Const GWL_EXSTYLE = (-20)
Private Const GWL_STYLE = (-16)
Private Const WS_MAXIMIZEBOX = &H10000
Private Const WS_MINIMIZEBOX = &H20000
Private Const WS_SYSMENU = &H80000
Private Const HWND_TOP = 0
Private Const SWP_NOMOVE = &H2
Private Const SWP_NOSIZE = &H1
Private Const SWP_FRAMECHANGED = &H20
Private Const SWP_DRAWFRAME = SWP_FRAMECHANGED
Private Declare Function SetWindowLong Lib "user32" _
Alias "SetWindowLongA" (ByVal hWnd As Long, _
ByVal nIndex As Long, ByVal dwNewLong 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 SetWindowPos Lib "user32" _
(ByVal hWnd As Long, ByVal hWndInsertAfter As Long, _
ByVal X As Long, ByVal Y As Long, ByVal cx As Long, _
ByVal cy As Long, ByVal wFlags As Long) As Long
'Ocultar Botón Cerrar(X)
Sub HideAccessCloseButton()
    Dim lngStyle As Long
    lngStyle = GetWindowLong(hWndAccessApp, GWL_STYLE)
    lngStyle = lngStyle And Not WS_SYSMENU
    Call SetWindowLong(hWndAccessApp, GWL_STYLE, lngStyle)
    Call SetWindowPos(hWndAccessApp, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE Or SWP_DRAWFRAME)
End Sub

'Mostrar Botón Cerrar (X) 
Sub UnHideAccessCloseButton()

   Dim lngStyle As Long
   
   lngStyle = GetWindowLong(hWndAccessApp, GWL_STYLE)
   lngStyle = lngStyle Or WS_SYSMENU
   Call SetWindowLong(hWndAccessApp, GWL_STYLE, lngStyle)
   Call SetWindowPos(hWndAccessApp, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE Or SWP_DRAWFRAME)
   
End Sub


En el evento Load del formulario para Ocultar:-

HideAccessCloseButton


En el Evento UnLoad del Formulario Para Mostrar (Si quieres >>> Es opcional)

UnhideAccessCloseButton
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable