' ESTA ES UNA VARIANTE DEL MODO1 EN LA QUE
' EL FORM PUEDE CAMBIAR DE ASPECTO PARA
' REVELAR CONTROLES OCULTOS.
Código vb:
Ver originalPrivate Sub Form_Resize()
Static PorcentajeH As Single
Static AntWidth As Single
Static AntHeight As Single
Static MinimoWidth As Single
Static EnUso As Integer
' *******************************************
' ESTA PARTE SE INCLUYE CON LA DE MAS ABAJO
Static Restar As Long
' *******************************************
If EnUso = 1 Then Exit Sub
On Local Error Resume Next
EnUso = 1
chkMostrarMasControles.Enabled = Me.WindowState = vbNormal
If Me.WindowState <> vbMinimized Then
' *******************************************
' ESTA PARTE SE INCLUYE CON LA DE MAS ABAJO
If NoAjustar = 0 Then
' La variable NoAjustar debe ser un Integer declarado
' como global al comienzo de este Form
' *******************************************
If AntWidth = 0 Then
AntWidth = Me.Width
AntHeight = Me.Height
' AÑADIENDO AQUI "* 0.8" CONSEGUIMOS QUE
' EL TAMAÑO MINIMO PERMITIDO Y USADO
' SEA INFERIOR AL TAMAÑO ORIGINAL.
MinimoWidth = Me.Width * 0.8
' TAMBIEN SE PUEDE USAR UN VALOR FIJO:
'MinimoWidth = 1000
' SIN EMBARGO ESTO OBLIGA A USAR PARA NUESTROS
' CONTROLES UNA FUENTE MAS FLEXIBLE, COMO "Arial".
' AÚN ASÍ NO HAY QUE REDUCIRLO MUY POR DEBAJO DE
' ESTE 0.8 YA QUE SI LO ENCOGES MUCHO LOS TEXTOS QUEDAN ILEGIBLES.
PorcentajeH = Me.Height / Me.Width
End If
If Me.Width < MinimoWidth Then Me.Width = MinimoWidth
If Me.WindowState <> vbMaximized Then Me.Height = Me.Width * PorcentajeH
' SOLO HAY QUE CAMBIAR AQUI LOS "TRUE, FALSE" SEGUN QUIERAS
' AUTO-AJUSTAR O NO LOS TEXTOS Y SI QUIERES QUE SE AJUSTEN
' SEGUN EL ALTO O SEGUN EL ANCHO DEL FORM.
'If NoAjustar = 0 Then
AjustaControlesForm Me, AntHeight, AntWidth, True, False
'End If
' *******************************************
Else
' ESTA PARTE SE INCLUYE EN VENTANAS QUE
' PUEDEN CRECER PARA MOSTRAR CONTROLES
' ESCONDIDOS, DE FORMA QUE SE AJUSTEN
' LOS VALORES MEMORIZADOS AL NUEVO ASPECTO.
'If chkMostrarMasControles = 0 Then
' este checkbox es el que muestra o no el trozo de formulario oculto.
' ESTA PARTE SOLO SIRVE SI ES EL ANCHO
' LO QUE SE CAMBIA DE TAMAÑO, YA QUE
' EL MINIMO SOLO AFECTA AL WIDTH
' PARA QUE MANTENGA LA RELACION DE ASPECTO.
' EN ESTE CASO EL FORM SE HACE MAS ALTO
' PARA MOSTRAR MAS CONTROLES, DE MODO
' QUE EL ANCHO NO LO TOCAMOS.
' MinimoWidth = MinimoWidth - Restar
'Else
' Restar = Me.Width - AntWidth
' Restar = Restar * (MinimoWidth / AntWidth)
' MinimoWidth = MinimoWidth + Restar
'End If
' SE TOQUE O NO EL ANCHO, EL PORCENTAJE
' DE ALTO SI HAY QUE REAJUSTARLO.
PorcentajeH = Me.Height / Me.Width
' *******************************************
End If
AntWidth = Me.Width
AntHeight = Me.Height
' AQUI VAN LOS CAMBIOS PERSONALIZADOS, COMO AJUSTAR
' EL ALTO DE LOS LISTBOX SI HAY ALGUNO.
'List1.Height = Me.Height - 500
End If
EnUso = 0
End Sub
El código del checkbox chkMostrarMasControles sería algo como:
Código vb:
Ver originalIf chkMostrarMasControles = 1 Then
NoAjustar = 1
Me.Height = Me.Height + (Me.Height / 3)
NoAjustar = 0
Else
NoAjustar = 1
Me.Height = Me.Height - (Me.Height / 4)
NoAjustar = 0
End If
Una vez agrandado o encogido, el form seguirá manteniendo la nueva relación de aspecto.