Evento al minimizar un formulario |
Responder
|
| Autor | |
JGOfisoft
Nuevo
Unido: 20/Agosto/2015 Localización: España Estado: Sin conexión Puntos: 35 |
Opciones de entrada
Gracias(0)
Cita Respuesta
Tema: Evento al minimizar un formularioEnviado: 29/Junio/2023 a las 16:47 |
|
Buenas tardes, alguien sabría como ejecutar una determinada acción al minimizar un formulario de Access 2013; o bien minimizar todo el Access al minimizar cualquiera de sus formularios.
Gracias anticipadas.
|
|
|
Juan Gonzalez
|
|
![]() |
|
Mihura
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador
Unido: 06/Mayo/2005 Localización: En la dehesa Estado: Sin conexión Puntos: 14428 |
Opciones de entrada
Gracias(0)
Cita Respuesta
Enviado: 29/Junio/2023 a las 17:03 |
|
Hay un evento que podrías usar: Al cambiar de tamaño, controlando el tamaño del mismo (altura menor que xxxx) puedes lanzar los comandos que quieras.
|
|
![]() |
|
JGOfisoft
Nuevo
Unido: 20/Agosto/2015 Localización: España Estado: Sin conexión Puntos: 35 |
Opciones de entrada
Gracias(0)
Cita Respuesta
Enviado: 29/Junio/2023 a las 18:12 |
|
LO he intentado pero conserva el tamaño aunque esté minimizado.
If Me.Section(acdetail).Heigt < 100 Then MsgBox "Formulario minimizado" End If Siempre da el tamaño original del detalle del formulario esté o no minimizado
|
|
|
Juan Gonzalez
|
|
![]() |
|
Mihura
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador
Unido: 06/Mayo/2005 Localización: En la dehesa Estado: Sin conexión Puntos: 14428 |
Opciones de entrada
Gracias(0)
Cita Respuesta
Enviado: 29/Junio/2023 a las 18:52 |
|
Con Me.InsideHeight te va dando la altura del formulario si cambias el tamaño, pero si lo miniminizas repite ese valor.
Podrías usar eso en el evento, memorizando previamente el valor. Otra opción que se me ocurre es que elimines los botones de control y te los crees tú. |
|
![]() |
|
JGOfisoft
Nuevo
Unido: 20/Agosto/2015 Localización: España Estado: Sin conexión Puntos: 35 |
Opciones de entrada
Gracias(0)
Cita Respuesta
Enviado: 29/Junio/2023 a las 20:11 |
|
Lo que pretendo es minimizar la aplicación desarrollada en access al minimizar cualquiera de sus formularios o informes.
Visto que lo de minimizar no lo consigue que código debería poner en dicho botón, lógicamente este botón habría de ponerse en todos los formulario
|
|
|
Juan Gonzalez
|
|
![]() |
|
Mihura
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador
Unido: 06/Mayo/2005 Localización: En la dehesa Estado: Sin conexión Puntos: 14428 |
Opciones de entrada
Gracias(0)
Cita Respuesta
Enviado: 29/Junio/2023 a las 21:28 |
|
Application.DoCmd.RunCommand acCmdAppMinimize |
|
![]() |
|
JGOfisoft
Nuevo
Unido: 20/Agosto/2015 Localización: España Estado: Sin conexión Puntos: 35 |
Opciones de entrada
Gracias(0)
Cita Respuesta
Enviado: 30/Junio/2023 a las 17:15 |
|
Perdón por la insistencia, esta acción no hace nada.
Private Sub Minimizar_Click() Application.DoCmd.RunCommand acCmdAppMinimize End Sub |
|
|
Juan Gonzalez
|
|
![]() |
|
joanka
Habitual
Unido: 07/Abril/2021 Localización: Lleida Estado: Sin conexión Puntos: 144 |
Opciones de entrada
Gracias(0)
Cita Respuesta
Enviado: 30/Junio/2023 a las 19:07 |
|
Creo que no se puede hacer a partir de Access 2010, solo puedes minimizar el formulario en el que estás.
|
|
![]() |
|
xavi
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador
Terrassa-BCN Unido: 10/Mayo/2005 Localización: Catalunya |||| Estado: Sin conexión Puntos: 14926 |
Opciones de entrada
Gracias(0)
Cita Respuesta
Enviado: 01/Julio/2023 a las 11:11 |
|
A mi el acCmdAppMinimize me funciona correctamente en 365 versión 2305 desde la ventana de inmediato.
Un saludo
|
|
![]() |
|
joanka
Habitual
Unido: 07/Abril/2021 Localización: Lleida Estado: Sin conexión Puntos: 144 |
Opciones de entrada
Gracias(0)
Cita Respuesta
Enviado: 01/Julio/2023 a las 11:31 |
|
Tienes razón, sí que funciona, el problema es que si lo haces desde un formulario con las propiedades en modo Modal = Si, no funciona. |
|
![]() |
|
JGOfisoft
Nuevo
Unido: 20/Agosto/2015 Localización: España Estado: Sin conexión Puntos: 35 |
Opciones de entrada
Gracias(0)
Cita Respuesta
Enviado: 02/Julio/2023 a las 17:14 |
|
Muchas gracias a todos por su ayuda.
Al final y despues de mucho indagar y probar lo he resuelto de la forma, no se si mas ortodoxa pero si suficientemente eficiente. Para ello he realizado los siguientes pasos: a) - Se crea una tabla denominada ObjetosAbiertos donde se van añadiendo y quitando aquellos objetos (formularios e informes) que se van abriendo y cerrando; está formada por los siguientes 3 campos: 1 - Campo numércio (clave princiapl) denominado Orden, se van ordenando de forma consecutiva los objetos que se van abriendo. 2 - Campo de texto denominado Tipo, donde se va indicando si el objeto abierto es fromulario o informe. 3 - Campo de texto denominado Nombre, donde se incluye el nombre del objeto abierto. b) - Se crea en un módulo la función WindowState, que nos sirve para obtener el estado de la ventana en cuestión y una variable pública para referenciar los objetos abiertos. La variable y la función son las siguientes: ' Variable de Objeto Public MisObjetosAbiertos As RecordSet ' Estuctura con información sobre el estado de una ventana Public Type WINDOWPLACEMENT Length As Long Flags As Long showCmd As Long End Type ' Función que devuelve el estado de una ventana Public Function WindowState(hWnd As Long) As Long Dim WndPl As WINDOWPLACEMENT WndPl.Length = Len(WndPl) ' Asignamos una longitud a la estructura WINDOWPLACEMENT. Imprescindible!!! If GetWindowPlacement(hWnd, WndPl) Then ' Comprobamos estado de la ventana WindowState = WndPl.showCmd ' Devolvemos el estado actual (1 - Normal, 2 - Minimizada, 3 - Maximizada) End If ' Final comprobación estado de la ventana End Function c) - Seguidamente, en cada formulario e informe he incluido el siguiente código en los eventos siguientes: 1 - Al abrir el formulario: Private Sub Form_Open(Cancel As Integer) DoCmd.SetWarnings False ' Desactivamos mensajes del sistema DoCmd.RunSQL "INSERT INTO ObjetosAbiertos ( Orden, Tipo, Nombre ) SELECT Nz(DMax('Orden','ObjetosAbiertos'),0)+1 AS Orden, 'Formulario' AS Tipo, '" & Me.Name & "' AS Nombre;" ' Añadimos objeto abierto DoCmd.SetWarnings True ' Activamos mensajes del sistema End Sub 2 - Al cambiar el tamaño: Private Sub Form_Resize() On Error GoTo Error Dim ObjetoEnfoque As Object If WindowState(Me.hWnd) = 2 Then ' Comprobamos estado de la ventana (minimizada) Me.Application.DoCmd.RunCommand acCmdAppMinimize ' Minimizamos todo Else ' Estado Normal o maximizada Set MisObjetosAbiertos = CurrentDb.OpenRecordset("SELECT * FROM ObjetosAbiertos ORDER BY Orden;") ' Obtenemos objetos abiertos While (Not MisObjetosAbiertos.EOF) ' Recorremos objetos abiertos If MisObjetosAbiertos!TIPO = "Formulario" Then ' Comprobamos tipo de objeto Set ObjetoEnfoque = Forms(MisObjetosAbiertos!Nombre): DoCmd.SelectObject acForm, MisObjetosAbiertos!Nombre, False ' Establecemos Objeto y lo seleccionamos If MisObjetosAbiertos!Nombre = "Principal" Then DoCmd.RunCommand acCmdAppMaximize Else DoCmd.Restore ' Maximizamos si es el Formulario principal (opciones) o restauramos para el resto de objetos Else ' Informe Set ObjetoEnfoque = Reports(MisObjetosAbiertos!Nombre) ' Establecemos objeto DoCmd.SelectObject acReport, MisObjetosAbiertos!Nombre, False: DoCmd.RunCommand acCmdAppMaximize ' Seleccionamos Objeto y lo restauramos End If ' Final comprobación tipo de objeto MisObjetosAbiertos.MoveNext ' Pasamos al siguiente objeto abierto Wend ' Final recorrido objetos abiertos MisObjetosAbiertos.Close: Set MisObjetosAbiertos = Nothing ' Anulamos Recordset de objetos abiertos If Not (ObjetoEnfoque Is Nothing) Then ObjetoEnfoque.SetFocus: Set ObjetoEnfoque = Nothing ' Situamos foco y anulamos variable End If ' Final comprobación estado ventana SalirError: Exit Sub Error: If Err.Number = 2486 Then Resume Next ' Continuamos para operación no disponible Resume SalirError ' Concluimos procedimiento End Sub 3 - Al descargar excepto en el Menú Principal (Opciones): Private Sub Form_Close() ' Todos los Objetos DoCmd.SetWarnings False ' Desactivamos mensajes del sistema DoCmd.RunSQL "DELETE * FROM ObjetosAbiertos WHERE (Tipo='Formulario') AND (Nombre='" & Me.Name & "');" ' Eliminamos Objeto de la tabla ObjetosAbiertos (adecuar Tipo) DoCmd.SetWarnings True ' Activamos mensajes del sistema End Sub 3 - Al descargar el Menú Principal (Opciones): Private Sub Form_Close() ' Menú Principal DoCmd.SetWarnings False: DoCmd.RunSQL "DELETE * FROM ObjetosAbiertos;": DoCmd.SetWarnings True ' Vaciamos la tabla de ObjetosAbiertos End Sub Espero que esto ayude a otros, saludos
|
|
|
Juan Gonzalez
|
|
![]() |
|
Responder
|
|
|
Tweet
|
| Ir al foro | Permisos de foro ![]() Usted No puede publicar nuevos temas en este foro Usted No puede responder a temas en este foro Usted No puede borrar sus mensajes en este foro Usted No puede editar sus mensajes en este foro Usted No puede crear encuestas en este foro Usted No puede votar en encuestas en este foro |