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

Tema cerradoCentrar formulario en pantalla

 Responder Responder
Autor
Mensaje
Bepb Ver desplegable
Habitual
Habitual
Avatar

Unido: 02/Febrero/2012
Localización: España
Estado: Sin conexión
Puntos: 152
Enlace directo a este mensaje Tema: Centrar formulario en pantalla
    Enviado: 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
Arriba
mounir Ver desplegable
Colaborador
Colaborador


Unido: 09/Febrero/2009
Localización: Asturias-España
Estado: Sin conexión
Puntos: 6479
Enlace directo a este mensaje 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.
Arriba
lbauluz Ver desplegable
Administrador
Administrador
Avatar

Unido: 29/Marzo/2005
Localización: La Gloria
Estado: Sin conexión
Puntos: 3865
Enlace directo a este mensaje 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
Arriba
Bepb Ver desplegable
Habitual
Habitual
Avatar

Unido: 02/Febrero/2012
Localización: España
Estado: Sin conexión
Puntos: 152
Enlace directo a este mensaje 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
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14746
Enlace directo a este mensaje 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

Xavi, un minyó de Terrassa

Mi web
Arriba
Bepb Ver desplegable
Habitual
Habitual
Avatar

Unido: 02/Febrero/2012
Localización: España
Estado: Sin conexión
Puntos: 152
Enlace directo a este mensaje 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
Arriba
Bepb Ver desplegable
Habitual
Habitual
Avatar

Unido: 02/Febrero/2012
Localización: España
Estado: Sin conexión
Puntos: 152
Enlace directo a este mensaje 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
Arriba
Bepb Ver desplegable
Habitual
Habitual
Avatar

Unido: 02/Febrero/2012
Localización: España
Estado: Sin conexión
Puntos: 152
Enlace directo a este mensaje 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
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable