Hola!
Quizás puedas sacar algo de esto:
Public Sub AdaptarToResolucion(Formulario As Form)
'Propósito:
' Adapta los controles de un formulario en tiempo de ejecución
' dependiendo de la resolución de la pantalla.
'Parámetros:
' Formulario: Variable tipo form que será redimensionada.
'
Dim ControlForm
Dim ES_TAB As Boolean
Dim Cuad As RECT
Dim Res As Long
Dim CoordX As Single
Err.Clear
Res = GetWindowRect(GetDesktopWindow, Cuad)
If Res = 0 Then Exit Sub
CoordX = Cuad.Right 'Screen.Width / Screen.TwipsPerPixelX
If (Not ResOK) Or (CoordX = ResXDisenio) Then Exit Sub
On Error Resume Next
proporcional = CoordX / 800
If Formulario.WindowState <> 2 Then
Formulario.Width = Formulario.Width * proporcional
Formulario.Height = Formulario.Height * proporcional
End If
For Each ControlForm In Formulario.Controls
ControlForm.Top = ControlForm.Top * proporcional
If ControlForm.Left >= 0 Then
ControlForm.Left = ControlForm.Left * proporcional
ControlForm.Width = ControlForm.Width * proporcional
Err = 0
ControlForm.FontSize = Int(Val(ControlForm.FontSize * proporcional)) - 1
If Err <> 0 Then
Err = 0
ControlForm.Font.Size = Int(Val(ControlForm.Font.Size * proporcional)) - 1
End If
If Err <> 0 Then
ControlForm.Title.Font.Size = Int(Val(ControlForm.Title.Font.Size * proporcional)) - 1
End If
Err = 0
ControlForm.Font.Name = "Arial"
If Err <> 0 Then
Err = 0
ControlForm.FontName = "Arial"
End If
If Err <> 0 Then
Err = 0
ControlForm.Font = "Arial"
End If
If Err <> 0 Then
ControlForm.Title.Font.Name = "Arial"
End If
Else
If ControlForm.Tag = "ANCHO" Then
ControlForm.Left = (75000 - Abs(ControlForm.Left)) * proporcional
ControlForm.Width = ControlForm.Width * proporcional
ControlForm.FontSize = Int(Val(ControlForm.FontSize * proporcional)) - 1
ControlForm.Font.Size = Int(Val(ControlForm.Font.Size * proporcional)) - 1
ControlForm.Font.Name = "Arial"
ControlForm.FontName = "Arial"
ControlForm.Font = "Arial"
ControlForm.Title.Font.Name = "Arial"
ControlForm.Title.Font.Size = Int(Val(ControlForm.Title.Font.Size * proporcional)) - 1
End If
End If
ControlForm.TabMaxWidth = ControlForm.TabMaxWidth * proporcional
ControlForm.Height = ControlForm.Height * proporcional
ControlForm.X1 = ControlForm.X1 * proporcional
ControlForm.X2 = ControlForm.X2 * proporcional
ControlForm.Y1 = ControlForm.Y1 * proporcional
ControlForm.Y2 = ControlForm.Y2 * proporcional
Next ControlForm
End Sub
No sé si anda para todos los controles pues es algo que hice hace mucho...
Ah! Adapta a 800x600...
Osea:
Public Const ResXDisenio = 800
Public Function ResOK() As Boolean
Dim Cuad As RECT
Dim Res As Long
Dim CoordX As Single
ResOK = False
Res = GetWindowRect(GetDesktopWindow, Cuad)
If Res = 0 Then
ResOK = True
Exit Function
End If
CoordX = Cuad.Right 'Screen.Width / Screen.TwipsPerPixelX
If CoordX >= ResXDisenio Then
ResOK = True
End If
End Function
NOTA: Fíjate que el if que compara el Left del control, es paradeterminar si es un Tab. Las orejas del Tab tienen left negativo cuando no estan visibles.
Me faltaba eso
...
Saludos!