Ajustar formulario y elementos del mismo al tamaño y resolución de pantalla en access 2010

Creo que esta pregunta ya la he realizado con anterioridad pero, por si acaso, vuelvo a formularla.

Tengo una base de datos y, como supongo ocurre a todos, cuando la abro en un equipo en las que las características del monitor (tamaño y resolución) no son las mismas que las del equipo donde diseñé los formularios; esto, o se cortan (si el monitor es más pequeño - notebook) o quedan pequeños. Esto es no se redimensionan automáticamente a mayor o menor según el tipo de monitor.

He estado buscando por la red y preguntando a compañeros pero, hasta el momento, no encuentro quien me pueda echar una mano. Lo último a lo que he recurrido, y no se si será efectivo, es al uso de una API de windows:

'Para change Resolución de Pantalla
Public Const EWX_LOGOFF = 0
Public Const EWX_SHUTDOWN = 1
Public Const EWX_REBOOT = 2
Public Const EWX_FORCE = 4
Public Const CCDEVICENAME = 32
Public Const CCFORMNAME = 32
Public Const DM_BITSPERPEL = & H40000
Public Const DM_PELSWIDTH = & H80000
Public Const DM_PELSHEIGHT = & H100000
Public Const CDS_UPDATEREGISTRY = & H1
Public Const CDS_TEST = & H4
Public Const DISP_CHANGE_SUCCESSFUL = 0
Public Const DISP_CHANGE_RESTART = 1
Tipo typDevMODE
dmDeviceName As String * CCDEVICENAME
DmSpecVersion As Integer
DmDriverVersion As Integer
DmSize As Integer
DmDriverExtra As Integer
dmFields As Long
DmOrientation As Integer
DmPaperSize As Integer
DmPaperLength As Integer
DmPaperWidth As Integer
DmScale As Integer
DmCopies As Integer
DmDefaultSource As Integer
DmPrintQuality As Integer
DmColor As Integer
DmDuplex As Integer
DmYResolution As Integer
DmTTOption As Integer
DmCollate As Integer
dmFormName As String * CCFORMNAME
DmUnusedPadding As Integer
DmBitsPerPel As Integer
dmPelsWidth As Long
dmPelsHeight As Long
dmDisplayFlags As Long
dmDisplayFrequency As Long
Tipo End
EnumDisplaySettings Declare Function Lib "user32" Alias "EnumDisplaySettingsA" (ByVal lpszDeviceName As Long, ByVal iModeNum As Long, lptypDevMode Como Cualquiera) As Boolean
Declarar ChangeDisplaySettings Función Lib "user32" Alias "ChangeDisplaySettingsA" (lptypDevMode Como cualquier, ByVal dwFlags As Long) As Long
Declarar Función ExitWindowsEx Lib "user32" (uFlags ByVal As Long, ByVal dwReservado As Long) As Long
Dim typDevM Como typDevMODE
Dim lngResult As Long
IntAns Dim As Integer
'Recuperar información sobre el modo de gráficos actual
'En el dispositivo de visualización actual.
lngResult = EnumDisplaySettings (0, 0, typDevM)
'Establecer la nueva resolución. No cambie el color
'Profundidad para un reinicio no es necesario.
Con typDevM
. DmFields = DM_PELSWIDTH O DM_PELSHEIGHT
. DmPelsWidth = 640 'ScreenWidth (640,800,1024, etc)
. DmPelsHeight = 480 'ScreenHeight (480 600 768, etc)
End With
"Cambiar la configuración de pantalla para el modo gráfico especificado.
lngResult = ChangeDisplaySettings (typDevM, CDS_TEST)
Select Case lngResult
DISP_CHANGE_RESTART Case
intAns = MsgBox ("Debe reiniciar el equipo para aplicar estos cambios." & _
vbCrLf y vbCrLf & "¿Quiere reiniciar ahora?", _
vbYesNo + vbSystemModal, "Resolución de pantalla")
Si intAns = vbYes Entonces Llame ExitWindowsEx (EWX_REBOOT, 0)
Caso DISP_CHANGE_SUCCESSFUL
ChangeDisplaySettings llamada (typDevM, CDS_UPDATEREGISTRY)
MsgBox "Resolución de pantalla cambiado", vbInformation, "Resolución cambió"
Case Else
MsgBox "Modo no compatible", vbSystemModal, "Error"
End Select

Pero no tengo ni idea de como se usa, donde se coloca, ¿qué hay que hacer con este código?.

Estaría muy agradecido si alguien me pudiera dar alguna indicación.

1 Respuesta

Respuesta
1

Tienes que crear un módulo de y declarar cada función que necesites.

Por ejemplo, si tienes una función de API que cambia el modo de pantalla llamada "ChangeDisplaySettings", al declarar la función en el módulo tienes que poner lo siguiente:

Declarar Función ExitWindowsEx Lib "user32" (uFlags ByVal As Long, ByVal dwReservado As Long) As Long

Luego, solo tienes que llamar a la función ExitWindowsEx pasándole los valores uFlags, de tipo Entero y dwReservado, también entero... Algo así como esto:

SalirWindows=ExitWindowsEx(ParamSalir, ParamUflags)

La variable SalirWindows te devolverá el valor de la función, en este caso, si ha sido correcto o no.

Hola, muchas gracias por tu interés. Lo cierto es que no controlo las cuestiones de programación con código, alguna cosilla suelta y sencilla para funciones de botones y poco más. (He copiado código y lo he pegado adaptándolo a mis controles)

Me temo que lo que me planteas es algo bastante complejo, que me supera. Hasta donde llego, creo que se lo que tengo que hacer para crear un módulo y copiar el código que puse en mi primer mensaje, pero todo lo demás que me sugieres está fuera de mi alcance.

Yo solo trataba de completar el aspecto de la base de datos para usarla en los ordenadores en los que trabajo, el "grande de sobremesa de mi casa (19")" y los dos portátiles, uno de 15" y el micro de 10", de un modo más cómodo.

Reitero mi agradecimiento por tus indicaciones, trataré de hacer cosas a ver que pasa.

Lógicamente, hay que tener unos conocimientos mínimos de programación en Visual basic para hacer lo que tu pretendes...

De todos modos, creo que el problema no es de la resolución de la pantalla... Los formularios de Access no se redimensionan según la pantalla, sino que el tamaño está establecido por defecto en el propio formulario. Podrías tratar de ajustarlo con las propiedades Height y Width dependiendo del tipo de monitor, aunque sea algo manual...

Siento no poder ayudarte más...

Muchas gracias por atenderme. Esperaré a ver que sale y, mientras tanto, seguiré investigando. Quien sabe, quizás se incorpore esta posibilidad en access 2013 o en los sucesivos.

Un saludo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas