Centrar Formulario

Como puedo centrar un formulario por medio de código, dependiendo la resolución de la pantalla

2 Respuestas

Respuesta
1
Supongo que usas un formulario emergente y trabajas en varios equipos que tienen resoluciones distintas.
He creado este código que te puede ayudar.
Pégalo en un módulo estándar. Pestaña de módulos.
Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type
Private Declare Function GetWindowRect Lib "user32" _
                        (ByVal hwnd As Long, _
                        lpRect As RECT) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Function Ancho() As String
Dim rec As RECT
    Call GetWindowRect(GetDesktopWindow, rec)
    Ancho = CStr(rec.Right - rec.Left)
End Function
Function Alto() As String
Dim rec As RECT
Dim sHigh As String
    Call GetWindowRect(GetDesktopWindow, rec)
    Alto = CStr(rec.Bottom - rec.Top)
End Function

Con este código, creamos las funciones Ancho y Alto que nos dan la resolución de windows.
En el evento al activar de propiedades del formulario debes de incorporar el código
Dim xFrm As Double
Dim yFrm As Double
Dim xWindowsResolucion As Double
Dim yWindowsResolucion As Double
Dim posxFrm As Double
Dim posyFrm As Double
xFrm = Me.Form.WindowWidth / 567 ' en cm
yFrm = Me.Form.WindowHeight / 567 ' en cm
xWindowsResolucion = Ancho() / (37.79)
yWindowsResolucion = Alto() / (37.79)
posxFrm = ((xWindowsResolucion / 2) - (xFrm / 2)) * 567
posyFrm = ((yWindowsResolucion / 2) - (yFrm / 2)) * 567
Me.Form.Move Left:=posxFrm, Top:=posyFrm

Con este código sitúo el formulario en una posición centrada. He pasado los datos a centímetros con la conversión correspondiente.
Seguro que se puede simplificar.
A ver si te vale.
Una aperta.
Buen día, no soy muy experto pero creo que lo he realizado bien
en la pestaña de módulos he copiado este código
Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type
Private Declare Function GetWindowRect Lib "user32" _
                        (ByVal hwnd As Long, _
                        lpRect As RECT) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Function Ancho() As String
Dim rec As RECT
    Call GetWindowRect(GetDesktopWindow, rec)
    Ancho = CStr(rec.Right - rec.Left)
End Function
Function Alto() As String
Dim rec As RECT
Dim sHigh As String
    Call GetWindowRect(GetDesktopWindow, rec)
    Alto = CStr(rec.Bottom - rec.Top)
End Function
y en el formulario en los eventos al activar he pegado este codigo
Dim xFrm As Double
Dim yFrm As Double
Dim xWindowsResolucion As Double
Dim yWindowsResolucion As Double
Dim posxFrm As Double
Dim posyFrm As Double
xFrm = Me.Form.WindowWidth / 567 ' en cm
yFrm = Me.Form.WindowHeight / 567 ' en cm
xWindowsResolucion = Ancho() / (37.79)
yWindowsResolucion = Alto() / (37.79)
posxFrm = ((xWindowsResolucion / 2) - (xFrm / 2)) * 567
posyFrm = ((yWindowsResolucion / 2) - (yFrm / 2)) * 567
Me.Form.Move Left:=posxFrm, Top:=posyFrm
No se que he hecho mal, pero no funciona, el formulario es el inicio de la base y no es un formulario emergente
He colgado un ejemplo en la sección de descargas de mi página.
Echale un vistazo y me comentas.
http://personales.ya.com/pachaweb/
Si no eres capaz, mándame la base comprimida e intento solucionarlo.
[email protected]
Una aperta
Respuesta
1

Se puede simplificar aun más si colocas un formulario dentro de otro y en el evento Al abrir colocas el ss código:

Private Sub Form_Open(Cancel As Integer)

DoCmd. Maximize

'En el caso de querer maximizar

Dim centro As Long

centro = Me.WindowWidth / 2

Dim mitadsubformulario As Long

mitadsubformulario = Me.Subformularionombre.Width / 2

Me.Subformularionombre.Left = centro - mitadobjeto

End Sub

Se puede complicar un poquito más si quieres centrarlo también en altura.

En el evento al Al abrir y en el evento al cambiar el tamaño

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas