|
Responder
|
| Autor | |
Bepb
Habitual
Unido: 02/Febrero/2012 Localización: España Estado: Sin conexión Puntos: 162 |
Tema: Centrar formulario en pantallaEnviado: 08/Febrero/2023 a las 19:57 |
|
Hola, Alguien sabe como se puede centrar cualquier formulario, tenga el tamaño que tenga, en cualquier pantalla, sea de la resolución que sea. No en el entorno que Access sino en la pantalla del ordenador, porque siempre suelo usar DoCmd.Maximize. He hecho varias consultas en el foro para ver si encontraba algún tema de centrado de formularios en pantalla pero no me ha encontrado nada, por lo que me he decidido escribir este asunto. Un saludo y gracias.
|
|
|
Saludos desde Menorca. José Luis
|
|
![]() |
|
mounir
Colaborador
Unido: 09/Febrero/2009 Localización: Asturias-España Estado: Sin conexión Puntos: 6521 |
Enviado: 08/Febrero/2023 a las 20:26 |
|
Hola!
En propiedades del formulario, pestaña formato, pones la opción centrado automático a Sí es suficiente. |
|
|
Un Saludo.
|
|
![]() |
|
lbauluz
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: 29/Marzo/2005 Localización: La Gloria Estado: Sin conexión Puntos: 3878 |
Enviado: 09/Febrero/2023 a las 16:15 |
|
Buenas.
Por si lo quieres hacer a mano, tengo esto de hace años, robado CREO que de StackOverFlow, pero no estoy seguro de eso Option Explicit Private Declare PtrSafe Function GetSystemMetrics Lib "user32" (ByVal Index As Long) As Long Private Declare PtrSafe Function GetDC Lib "user32" (ByVal hWnd As Long) As Long Private Declare PtrSafe Function ReleaseDC Lib "user32" (ByVal hWnd As Long, ByVal hDC As Long) As Long Private Declare PtrSafe Function GetDeviceCaps Lib "gdi32" (ByVal hDC As Long, ByVal Index As Long) As Long Private Sub CenterForm() Dim ScreensWidth As Single Dim ScreensHeight As Single ScreensWidth = GetSystemMetrics(78) ScreensHeight = GetSystemMetrics(79) ScreensWidth = ConvertPixelsToPoints(ScreensWidth, "X") ScreensHeight = ConvertPixelsToPoints(ScreensHeight, "Y") With Application .WindowState = xlNormal .Width = 400 ' Aquí el tamaño de tu form .Height = 400 .Left = (ScreensWidth - .Width) / 2 .Top = (ScreensHeight - .Height) / 2 End With End Sub Private Function ConvertPixelsToPoints(ByVal pxls As Single, ByVal XorY As String) As Single Dim hDC As Long hDC = GetDC(0) If XorY = "X" Then ConvertPixelsToPoints = pxls * (72 / GetDeviceCaps(hDC, 88)) If XorY = "Y" Then ConvertPixelsToPoints = pxls * (72 / GetDeviceCaps(hDC, 90)) Call ReleaseDC(0, hDC) End Function Luis
|
|
|
El Búho es un pajarraco
|
|
![]() |
|
Bepb
Habitual
Unido: 02/Febrero/2012 Localización: España Estado: Sin conexión Puntos: 162 |
Enviado: 09/Febrero/2023 a las 21:38 |
|
Hola, Gracias por su contestación mounir y Ibauluz. Lo que propone mounir ya lo probé y si te encuentras en el entorno de Access lo centra en ese entorno, o sea que no incluye el área de los objetos, y si lo conviertes el ACCDE o muestras el formulario al iniciar la Base de datos lo centra bien horizontalmente (no mostrando el área de objetos y por consiguiente no teniendo ese espacio en cuenta, pero no verticalmente, ya que sale un margen superior mas pequeño que el margen inferior., ademas en estos dos últimos sale la cabecera de Access (lo cual no debería salir). También probé algo parecido a lo que propone Ibauluz y muestra el formulario centrado en pantalla aunque sigue saliendo la cabecera de Access. A lo mejor no me he explicado bien porque yo lo que intento hacer es que el formulario una vez lo tenga convertido en ACCDE o me inicie la Base de datos me lo muestre centrado pero maximizado, o sea que ocupe toda la pantalla pero el formulario salga centrado en esa pantalla, algo parecido a lo que hace DoCmd.Maximize. Un saludo y gracias por su atención. José L.
|
|
|
Saludos desde Menorca. José Luis
|
|
![]() |
|
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 |
Enviado: 09/Febrero/2023 a las 23:10 |
|
Hola,
No se si te acabo de entender así que lanzo la idea a ver si te sirve. Puedes utilizar una vista de "Documentos en pestañas" pero sin mostrar las fichas de documento. Si le ocultas el Ribbon ya lo tendrías. A ver si te vale. Al volver a leerlo me asalta la duda de que, en realidad, no quieras centrar los controles en el formulario. Eso se me antoja bastante más laborioso. Un saludo |
|
![]() |
|
Bepb
Habitual
Unido: 02/Febrero/2012 Localización: España Estado: Sin conexión Puntos: 162 |
Enviado: 15/Febrero/2023 a las 07:58 |
|
Hola Xavi, He probado lo que comentas de la vista con pestañas pero no consigo que no muestre las fichas o pestañas que incluye por defecto. En cuanto al Ribbon, en el mismo formulario le indico: DoCmd.ShowToolbar "Ribbon", acToolbarNo pero dado que me muestra el entorno de Access en cuanto le pulsas en la barra de herramientas que queda alguna de las opciones que muestra como son Archivo - Inicio - Que deseas hacer' se despliega el Ribbon correspondiente. he estado probando mil y una opciones pero lo único que consigo es que muestre al entrar en la Base de datos el formulario centrado pero con el entorno de Access como en la imagen: Y si abro otro formulario por debajo de este me sale en formato Dialog con lo cual no puedo quitarle los bordes para que parezca un solo formulario: Para centrarlo uso este código en el formulario: Option Compare Database Option Explicit 'Centrar Private Sub Form_Load() Dim sngLeft As Single Dim sngTop As Single Call ReturnPosition_CenterScreen(Me.WindowHeight / 20, Me.WindowWidth / 20, sngLeft, sngTop) sngLeft = sngLeft * 20 sngTop = sngTop * 20 DoCmd.MoveSize sngLeft, sngTop End Sub Private Sub Form_Open(cancel As Integer) DoCmd.ShowToolbar "Ribbon", acToolbarNo Call ShowWindow(hWndAccessApp, 0) Form.BorderStyle 0 End Sub Y este en un módulo. Option Compare Database Option Explicit '#If VBA7 Then Public Declare PtrSafe Function GetSystemMetrics Lib "user32" (ByVal Index As Long) As Long Public Declare PtrSafe Function GetDC Lib "user32" (ByVal hWnd As Long) As Long Public Declare PtrSafe Function ReleaseDC Lib "user32" (ByVal hWnd As Long, ByVal hDC As Long) As Long Public Declare PtrSafe Function GetDeviceCaps Lib "gdi32" (ByVal hDC As Long, ByVal Index As Long) As Long Public Declare PtrSafe Function GetWindowRect Lib "user32" (ByVal hWnd As Long, ByRef lpRect As udtRECT) As Long '#Else ' Declare Function GetSystemMetrics Lib "user32" (ByVal Index As Long) As Long ' Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long ' Declare Function ReleaseDC Lib "user32" (ByVal hWnd As Long, ByVal hDC As Long) As Long ' Declare Function GetDeviceCaps Lib "gdi32" (ByVal hDC As Long, ByVal Index As Long) As Long ' Declare Function GetWindowRect Lib "user32" (ByVal hWnd As Long, ByRef lpRect As udtRECT) As Long '#End If Type udtRECT Left As Long Top As Long Right As Long Bottom As Long End Type Public Declare PtrSafe Function ShowWindow Lib "user32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long Public Sub ReturnPosition_CenterScreen(ByVal sngHeight As Single, _ ByVal sngWidth As Single, _ ByRef sngLeft As Single, _ ByRef sngTop As Single) Dim sngAppWidth As Single Dim sngAppHeight As Single Dim hWnd As Long Dim lreturn As Long Dim lpRect As udtRECT 'hWnd = Application.hWnd 'Used in Excel and Word hWnd = Application.hWndAccessApp 'Used in Access lreturn = GetWindowRect(hWnd, lpRect) sngAppWidth = ConvertPixelsToPoints(lpRect.Right - lpRect.Left, "X") sngAppHeight = ConvertPixelsToPoints(lpRect.Bottom - lpRect.Top, "Y") sngLeft = ConvertPixelsToPoints(lpRect.Left, "X") + ((sngAppWidth - sngWidth) / 2) sngTop = ConvertPixelsToPoints(lpRect.Top, "Y") + ((sngAppHeight - sngHeight) / 2) End Sub Public Function ConvertPixelsToPoints(ByVal sngPixels As Single, _ ByVal sXorY As String) As Single Dim hDC As Long hDC = GetDC(0) If sXorY = "X" Then ConvertPixelsToPoints = sngPixels * (72 / GetDeviceCaps(hDC, 88)) End If If sXorY = "Y" Then ConvertPixelsToPoints = sngPixels * (72 / GetDeviceCaps(hDC, 90)) End If Call ReleaseDC(0, hDC) End Function Esto lo quiero para que en cualquier pantalla, que seguramente sera más grande que la yo utilizo, se puedan ver centrados los formularios y no en la esquina superior izquierda cuando los maximizo. Un saludo. José L.
Editado por Bepb - 15/Febrero/2023 a las 08:09 |
|
|
Saludos desde Menorca. José Luis
|
|
![]() |
|
Bepb
Habitual
Unido: 02/Febrero/2012 Localización: España Estado: Sin conexión Puntos: 162 |
Enviado: 15/Febrero/2023 a las 08:04 |
|
Ups! no me ha incluido las imágenes. Me he mirad como incluirlas pero me pide un servidor para almacenarlas y yo no tengo ninguno, ¿como se puede hacer? Disculpen las molestias
Editado por Bepb - 15/Febrero/2023 a las 08:11 |
|
|
Saludos desde Menorca. José Luis
|
|
![]() |
|
Bepb
Habitual
Unido: 02/Febrero/2012 Localización: España Estado: Sin conexión Puntos: 162 |
Enviado: 19/Marzo/2024 a las 17:24 |
|
Al final redefiní la pantalla y fue más práctico. Se puede cerrar el tema, gracias
|
|
|
Saludos desde Menorca. José Luis
|
|
![]() |
|
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 |