Ver Mensaje Individual
  #5 (permalink)  
Antiguo 03/07/2010, 08:19
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 8 meses
Puntos: 29
Respuesta: Aporte: Auto-ajustar tamaño y posicion de controles

' ESTA ES UNA VARIANTE DEL MODO1 EN LA QUE
' EL FORM PUEDE CAMBIAR DE ASPECTO PARA
' REVELAR CONTROLES OCULTOS.
Código vb:
Ver original
  1. Private Sub Form_Resize()
  2.         Static PorcentajeH As Single
  3.         Static AntWidth As Single
  4.         Static AntHeight As Single
  5.         Static MinimoWidth As Single
  6.         Static EnUso As Integer
  7.         ' *******************************************
  8.        ' ESTA PARTE SE INCLUYE CON LA DE MAS ABAJO
  9.        Static Restar As Long
  10.         ' *******************************************
  11.        If EnUso = 1 Then Exit Sub
  12.         On Local Error Resume Next
  13.         EnUso = 1
  14.         chkMostrarMasControles.Enabled = Me.WindowState = vbNormal
  15.         If Me.WindowState <> vbMinimized Then
  16.           ' *******************************************
  17.          ' ESTA PARTE SE INCLUYE CON LA DE MAS ABAJO
  18.          If NoAjustar = 0 Then
  19.           ' La variable NoAjustar debe ser un Integer declarado
  20.          ' como global al comienzo de este Form
  21.          ' *******************************************
  22.            If AntWidth = 0 Then
  23.               AntWidth = Me.Width
  24.               AntHeight = Me.Height
  25.  
  26.               ' AÑADIENDO AQUI "* 0.8" CONSEGUIMOS QUE
  27.              ' EL TAMAÑO MINIMO PERMITIDO Y USADO
  28.              ' SEA INFERIOR AL TAMAÑO ORIGINAL.
  29.              MinimoWidth = Me.Width * 0.8
  30.               ' TAMBIEN SE PUEDE USAR UN VALOR FIJO:
  31.              'MinimoWidth = 1000
  32.              ' SIN EMBARGO ESTO OBLIGA A USAR PARA NUESTROS
  33.              ' CONTROLES UNA FUENTE MAS FLEXIBLE, COMO "Arial".
  34.            ' AÚN ASÍ NO HAY QUE REDUCIRLO MUY POR DEBAJO DE
  35.            ' ESTE 0.8 YA QUE SI LO ENCOGES MUCHO LOS TEXTOS QUEDAN ILEGIBLES.
  36.  
  37.               PorcentajeH = Me.Height / Me.Width
  38.             End If
  39.             If Me.Width < MinimoWidth Then Me.Width = MinimoWidth
  40.             If Me.WindowState <> vbMaximized Then Me.Height = Me.Width * PorcentajeH
  41.  
  42.         ' SOLO HAY QUE CAMBIAR AQUI LOS "TRUE, FALSE" SEGUN QUIERAS
  43.        ' AUTO-AJUSTAR O NO LOS TEXTOS Y SI QUIERES QUE SE AJUSTEN
  44.        ' SEGUN EL ALTO O SEGUN EL ANCHO DEL FORM.
  45.            'If NoAjustar = 0 Then
  46.              AjustaControlesForm Me, AntHeight, AntWidth, True, False
  47.             'End If
  48.  
  49.             ' *******************************************
  50.          Else
  51.             ' ESTA PARTE SE INCLUYE EN VENTANAS QUE
  52.            ' PUEDEN CRECER PARA MOSTRAR CONTROLES
  53.            ' ESCONDIDOS, DE FORMA QUE SE AJUSTEN
  54.            ' LOS VALORES MEMORIZADOS AL NUEVO ASPECTO.
  55.  
  56.             'If chkMostrarMasControles = 0 Then  
  57.            ' este checkbox es el que muestra o no el trozo de formulario oculto.
  58.              ' ESTA PARTE SOLO SIRVE SI ES EL ANCHO
  59.              ' LO QUE SE CAMBIA DE TAMAÑO, YA QUE
  60.              ' EL MINIMO SOLO AFECTA AL WIDTH
  61.              ' PARA QUE MANTENGA LA RELACION DE ASPECTO.
  62.  
  63.               ' EN ESTE CASO EL FORM SE HACE MAS ALTO
  64.              ' PARA MOSTRAR MAS CONTROLES, DE MODO
  65.              ' QUE EL ANCHO NO LO TOCAMOS.
  66.              ' MinimoWidth = MinimoWidth - Restar
  67.            'Else
  68.              ' Restar = Me.Width - AntWidth
  69.              ' Restar = Restar * (MinimoWidth / AntWidth)
  70.              ' MinimoWidth = MinimoWidth + Restar
  71.            'End If
  72.  
  73.             ' SE TOQUE O NO EL ANCHO, EL PORCENTAJE
  74.            ' DE ALTO SI HAY QUE REAJUSTARLO.
  75.            PorcentajeH = Me.Height / Me.Width
  76.  
  77.             ' *******************************************
  78.          End If
  79.           AntWidth = Me.Width
  80.           AntHeight = Me.Height
  81.  
  82.          ' AQUI VAN LOS CAMBIOS PERSONALIZADOS, COMO AJUSTAR
  83.         ' EL ALTO DE LOS LISTBOX SI HAY ALGUNO.
  84.         'List1.Height = Me.Height - 500
  85.  
  86.         End If
  87.         EnUso = 0
  88.       End Sub
El código del checkbox chkMostrarMasControles sería algo como:
Código vb:
Ver original
  1. If chkMostrarMasControles = 1 Then
  2.        NoAjustar = 1
  3.          Me.Height = Me.Height + (Me.Height / 3)
  4.        NoAjustar = 0
  5.      Else
  6.        NoAjustar = 1
  7.          Me.Height = Me.Height - (Me.Height / 4)
  8.        NoAjustar = 0
  9.      End If

Una vez agrandado o encogido, el form seguirá manteniendo la nueva relación de aspecto.
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!

Última edición por pkj; 03/07/2010 a las 09:05