Ejemplo en Access: Mostrando los formularios abiertos (Parte II)

Antonio de Abogados-MF nos trae la segunda parte de su artículo «Mostrando los formularios abiertos (Parte I)«:

Como en el ejemplo anterior (Lista de Forms) esta vez os traigo una segunda parte del mismo. Si es cierto, que no es nada visual como la primera entrega donde podíamos incorporar en nuestra lista imágenes que identificaran cada formulario abierto. La primera entrega está pensada para aplicaciones pequeñas pongamos 15-20 formularios, algo que no la hace crecer demasiado al introducir tantas imágenes pero, alguien se estará preguntando, ¿y qué ocurre con aplicaciones que cuenten con 50, 100, 200 o más formularios?. Pues imaginad la cantidad de trabajo y el tamaño del archivo al cargar tantas imágenes. Ese es el motivo de esta parte II.

Tal y como la he concebido se necesita de un módulo y una tabla que en la primera parte no hacía falta, ya que cargábamos TODOS los formularios en el formulario continuo (imagen y nombre) y se marcaban en negrita y rojo los que estaban abiertos, ¿os acordáis? En este caso, sólo se van a mostrar aquellos formularios que estén abiertos, por lo que en un módulo contamos con esto:

 

Option Compare Database
Option Explicit

Public Sub FAbiertos(sForm As String, sTitulo As String)

Dim sSQL As String
DoCmd.SetWarnings False

'Ahora indico los abiertos
sSQL = " INSERT INTO T_Abiertos ( Nombre, Titulo ) " & _
             "VALUES ('" & sForm & "','" & sTitulo & "')"
    DoCmd.RunSQL sSQL

DoCmd.SetWarnings True

End Sub

Public Sub FCerrados(sForm As String)

Dim sSQL As String
DoCmd.SetWarnings False

'Ahora indico los cerrados
sSQL = " DELETE T_Abiertos FROM T_Abiertos WHERE ([T_Abiertos].[Nombre]  ='" & sForm & "')"
    DoCmd.RunSQL sSQL

DoCmd.SetWarnings True

End Sub

Y desde los formularios llamamos a ambas, como en este caso desde el formulario “Clientes”,

 

Option Compare Database

Private Sub Form_Current()
'El título del Formulario es el nombre del cliente
Me.Caption = "Cliente > " & Me.NombreCompañía

'Llamo a la función para que me cargue en la tabla
'el nombre del formulario y su título
Call FAbiertos(Me.Name, Me.Caption)
End Sub

Private Sub Form_Unload(Cancel As Integer)
'Llamo a la función para que me borre de la tabla
'el formulario que estoy cerrando sólo por su nombre
Call FCerrados(Me.Name)
End Sub

Por lo que contamos con una pantalla o menú principal que nos lleva a otras partes de nuestra aplicación (como en la primera parte),

imagen1

Como es lógico, no todos los formularios suelen tener las mismas medidas, los hay de diferentes tamaños, de tal manera que si tenemos varios abiertos los más grandes y con el foco activo pueden tapar a otros de menor tamaño, donde en un momento dado, no tenemos una certeza de cuántos formularios tenemos activos en nuestra pantalla en ese momento.

Esta solución lo que hace es mostrarnos en un cuadro de lista que lee directamente de la tabla, los formularios cargados o abiertos de la aplicación y el título nos lo indica en número,

 

Si pulsamos sobre la imagen que indico con la flecha naranja, se nos abre una ventana donde nos pone de los formularios de nuestra aplicación cuáles están abiertos.

Como se puede apreciar el formulario Clientes y Empleados quedan tapados por el menú principal, en este caso, yo los he dejado un poco visibles para demostrar que lo que indica la lista es correcto, pero realmente en el manejo normal del programa el formulario Clientes quedaría tapado por los formularios que se encuentren activos por encima (Menú Principal y Proveedores). Para más información nos indica el formulario abierto y en qué registro se encuentra en ese momento.

También le he dado una función a este formulario “ListForm”, nos permite que si pulsamos en el nombre de un formulario nos lo pone encima de los demás. Esto queda al criterio de cada uno y las necesidades o funciones que considere para su aplicación.

Puedes bajarte el ejemplo del siguiente enlace: Formularios Abiertos Parte II

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.