Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Aporte: Auto-ajustar tamaño y posicion de controles

Estas en el tema de Aporte: Auto-ajustar tamaño y posicion de controles en el foro de Visual Basic clásico en Foros del Web. Siguiendo el ejemplo de Erbuson (y de muchos otros antes que él), aunque aún sin estar seguro de que a alguien le interese tanto como ...
  #1 (permalink)  
Antiguo 03/07/2010, 08:15
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 18 años, 3 meses
Puntos: 29
Aporte: Auto-ajustar tamaño y posicion de controles

Siguiendo el ejemplo de Erbuson (y de muchos otros antes que él), aunque aún sin estar seguro de que a alguien le interese tanto como para estudiar su funcionamiento para usarlo, voy a compartir con todos la última sub que he diseñado para mis programas.
Espero que con los comentarios incluidos os aclareis. Yo se la estoy incorporando a casi todos mis proyectos.

Como dice el título, esta es una sub que ajusta automáticamente el tamaño de los controles de un form segun este último va cambiando de tamaño.
Permite incluso reducir el form a un tamaño más pequeño que el original.

Lógicamente tiene unas reglas y limitaciones que hay que respetar, y también hay que recordar que la perfección no existe, y menos en algo creado por mí, pero el resultado merece la pena, sobre todo cuando tienes un form con 30 botones, 15 frames, 10 scrollbars y 40 labels y quieres que tu ventana se agrande y encoja.

La teoría es que esta sub se incluya en un módulo para estar accesible a todos los formularios que quieras resizar con ella.
Los ejemplos que pondré después de esta, son subs Form_Resize con diferentes modos de uso que he creado según la naturaleza del form al que se lo quería aplicar.

Recomiendo leer todos los comentarios incluidos, aunque algunos estén repetidos o quizá no muy claros ya que en principio eran solo para mi uso.

Algunas comparaciones en el código parecen innecesarias porque he incluido un "on local error resume next", sin embargo como tengo configurado el VB como "interrupción en todos los errores" me salta error si no las incluyo.
De todas formas recomiendo dejar todas las comparaciones incluidas, ya que el código que las sigue cuenta con que existen esos filtros delante que evitarán manipular un control indebidamente, como activar un timer durante unos milisegundos sin que deba hacerse.

Una vez dominado el tema vereis que se convierte casi en un simple copiar y pegar.
__________________
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 08:58
  #2 (permalink)  
Antiguo 03/07/2010, 08:16
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 18 años, 3 meses
Puntos: 29
Respuesta: Aporte: Auto-ajustar tamaño y posicion de controles

Sub principal:

Código vb:
Ver original
  1. Sub AjustaControlesForm(Formulario As Form, ByVal AntHeight As Single, _
  2.                     ByVal AntWidth As Single, Optional ByVal AjustarFuentes As Boolean = True, _
  3.                     Optional ByVal AjustarFuentesAlAncho As Boolean = False)
  4.   Dim PorcentajeH As Double
  5.   Dim PorcentajeW As Double
  6.   Dim EnaBAK As Boolean
  7.   Dim tControl As Control
  8.   If Formulario.WindowState = vbMinimized Then Exit Sub
  9.   On Local Error Resume Next
  10.   If Formulario.Height <> AntHeight Or Formulario.Width <> AntWidth Then
  11.     PorcentajeH = ((Formulario.Height - AntHeight) * 100) / AntHeight
  12.     PorcentajeW = ((Formulario.Width - AntWidth) * 100) / AntWidth
  13.    
  14.     For Each tControl In Formulario.Controls
  15.    
  16.       ' SI EL TIPO DE CONTROL NO ES VISIBLE,
  17.      ' COMO UN TIMER, NO SE TOCA.
  18.      If TypeOf tControl Is Timer = False _
  19.       And TypeOf tControl Is Menu = False _
  20.       Then
  21.       ' AÑADE LOS CONTROLES QUE VEAS NECESARIOS,
  22.      ' DEPENDIENDO DE TU PROGRAMA.
  23.      ' P.EJ. PUEDES AÑADIR LOS COMMONDIALOG
  24.      ' SI TU PROGRAMA CONTIENE ALGUNO.
  25.      'And TypeOf tControl Is CommonDialog = False _
  26.       ' SIN EMBARGO AÑADIRLOS, CUANDO EL PROYECTO
  27.      ' NO LOS CONTIENE, PROVOCA ERRORES (AL MENOS A MI)
  28.      ' POR ESO NO INCLUYO POR DEFECTO EL COMMONDIALOG
  29.  
  30.         ' ESTA PARTE ES PARA QUE SE REDIBUJEN
  31.        ' BIEN LOS CONTROLES QUE NO SE ENCUENTREN ENABLED.
  32.        ' SIN EMBARGO ALGUNOS CONTROLES TAMPOCO
  33.        ' ADMITEN ESTA PROPIEDAD...
  34.        If TypeOf tControl Is Line = False Then
  35.           EnaBAK = tControl.Enabled
  36.           tControl.Enabled = False
  37.           tControl.Enabled = True
  38.         End If
  39.        
  40.         ' SI HAY QUE AJUSTAR EL TAMAÑO DE LAS FUENTES DE TEXTO...
  41.        If AjustarFuentes = True Then
  42.           ' NO CAMBIAMOS LAS FUENTES SI NO TIENEN TEXTO.
  43.          If TypeOf tControl Is HScrollBar = False _
  44.           And TypeOf tControl Is VScrollBar = False _
  45.           And TypeOf tControl Is Line = False _
  46.           And TypeOf tControl Is Slider = False _
  47.           And TypeOf tControl Is Shape = False Then
  48.             ' Las fuentes se ajustan por defecto al alto del form
  49.            If AjustarFuentesAlAncho = True Then
  50.               tControl.FontSize = tControl.FontSize + ((PorcentajeW * tControl.FontSize) / 100)
  51.             Else
  52.               ' las fuentes se ajustan por defecto al alto porque si
  53.              ' se hace al ancho se deforman los botones y ademas no se
  54.              ' puede estirar para ver mas texto (p.ej en un listbox)
  55.              ' porque el texto crece tambien.
  56.              
  57.               ' SI APARECE UN ERROR USA ESTOS MSGBOX PARA DESCUBRIR
  58.              ' EL CONTROL (Y SU FORM) QUE NO ES COMPATIBLE, PARA
  59.              ' AGREGARLO A LAS COMPARACIONES Y REPARAR EL FALLO.
  60.              'MsgBox tControl.name
  61.              'MsgBox Formulario.name
  62.              
  63.               ' SI ES UN RICHTEXTBOX EL FONTSIZE SE HACE DIFERENTE.
  64.              ' SI TU FORMULARIO CONTIENE RICHTEXTBOX ACTIVA LAS
  65.              ' SIGUIENTES 4 LÍNEAS ANULADAS.
  66.              'If TypeOf tControl Is RichTextBox = True Then
  67.              '  tControl.Font.Size = tControl.Font.Size + ((PorcentajeH * tControl.Font.Size) / 100)
  68.              'Else
  69.                tControl.FontSize = tControl.FontSize + ((PorcentajeH * tControl.FontSize) / 100)
  70.               'End If
  71.              ' SI TIENES UN CONTROL QUE NO HAYA PROBADO YO, Y QUE
  72.              ' TENGA EL FONTSIZE DE LA FORMA "FONT.SIZE", AÑADE UNA COMPARACION
  73.              ' EN EL CÓDIGO ANTERIOR.
  74.              
  75.             End If
  76.           End If
  77.         End If
  78.        
  79.        
  80.         ' AJUSTAMOS EL CONTROL
  81.        If TypeOf tControl Is Line = True Then
  82.         ' SI ES DEL TIPO LINE SE AJUSTAN X1, Y1, X2, Y2
  83.          tControl.X1 = tControl.X1 + ((PorcentajeW * tControl.X1) / 100)
  84.           tControl.X2 = tControl.X2 + ((PorcentajeW * tControl.X2) / 100)
  85.           tControl.Y1 = tControl.Y1 + ((PorcentajeH * tControl.Y1) / 100)
  86.           tControl.Y2 = tControl.Y2 + ((PorcentajeH * tControl.Y2) / 100)
  87.         Else
  88.          
  89.           ' SI ES DE OTRO TIPO SE AJUSTA EL TAMAÑO Y POSICION
  90.          
  91.           ' PERO NO CAMBIAMOS EL HEIGHT SI ES DE SOLO LECTURA.
  92.          ' LOS COMBOBOX Y DRIVELISTBOX SE AJUSTAN SEGUN
  93.          ' EL FONTSIZE, Y NO SE DEJAN CAMBIAR A MANO.
  94.          If TypeOf tControl Is ComboBox = False _
  95.           And TypeOf tControl Is DriveListBox = False Then
  96.             tControl.Height = tControl.Height + ((PorcentajeH * tControl.Height) / 100)
  97.           End If
  98.  
  99.           ' NO SE PUEDE CAMBIAR ESTE ORDEN.
  100.          ' PRIMERO HAY QUE AJUSTAR EL TAMAÑO DE FUENTES
  101.          ' Y DESPUES EL HEIGHT SE TIENE QUE AJUSTAR ANTES
  102.          ' QUE LOS DEMÁS, PORQUE SI NO, LOS BOTONES
  103.          ' SE HACEN MAS ALTOS DE LO DEBIDO.
  104.  
  105.           tControl.Top = tControl.Top + ((PorcentajeH * tControl.Top) / 100)
  106.           tControl.Left = tControl.Left + ((PorcentajeW * tControl.Left) / 100)
  107.           tControl.Width = tControl.Width + ((PorcentajeW * tControl.Width) / 100)
  108.        
  109.         End If
  110.        
  111.         ' AQUI SE VUELVEN A DESACTIVAR LOS CONTROLES
  112.        ' QUE AL COMENZAR TUVIESEN LA PROPIEDAD ENABLED = FALSE
  113.        If TypeOf tControl Is Line = False Then
  114.           tControl.Enabled = EnaBAK
  115.         End If
  116.       End If
  117.     Next tControl
  118.   End If
  119. End Sub
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!
  #3 (permalink)  
Antiguo 03/07/2010, 08:17
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 18 años, 3 meses
Puntos: 29
Respuesta: Aporte: Auto-ajustar tamaño y posicion de controles

' ESTA SUB AJUSTA EL TAMAÑO DE LOS CONTROLES DE UN FORMULARIO
' AL TAMAÑO DE ESTE, Y OPCIONALMENTE EL TAMAÑO DE LOS TEXTOS.
' LOS PARAMETROS SON 5.
' 3 OBLIGATORIOS: 1-EL FORMULARIO, 2-EL ANTERIOR HEIGHT,3-EL ANTERIOR WIDTH
' 2 OPCIONALES: 4-UN BOOLEAN PARA AJUSTAR O NO LAS FUENTES Y 5-OTRO BOOLEAN
' PARA AJUSTAR LAS FUENTES AL ALTO O AL ANCHO DEL FORM.
' POR DEFECTO SE AJUSTAN LAS FUENTES SEGÚN EL ALTO DEL FORM.


' SE USA DESDE EL FORM_RESIZE, Y PARA ELLO
' ESTOS SERIAN LOS 2 MODOS GENERALES:

' MODO 1
' ESTE RESIZE ES EL RECOMENDADO SIEMPRE QUE
' LA NATURALEZA DEL FORM NO OBLIGUE A USAR EL OTRO.
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.         If EnUso = 1 Then Exit Sub
  8.         On Local Error Resume Next
  9.         EnUso = 1
  10.         If Me.WindowState <> vbMinimized Then
  11.           If AntWidth = 0 Then
  12.             AntWidth = Me.Width
  13.             AntHeight = Me.Height
  14.      
  15.             ' AÑADIENDO AQUI "* 0.8" CONSEGUIMOS QUE
  16.            ' EL TAMAÑO MINIMO PERMITIDO Y USADO
  17.            ' SEA INFERIOR AL TAMAÑO ORIGINAL.
  18.            MinimoWidth = Me.Width * 0.8
  19.             ' TAMBIEN SE PUEDE USAR UN VALOR FIJO:
  20.            'MinimoWidth = 1000
  21.            ' SIN EMBARGO ESTO OBLIGA A USAR PARA NUESTROS
  22.            ' CONTROLES UNA FUENTE MAS FLEXIBLE, COMO "Arial".
  23.            ' AÚN ASÍ NO HAY QUE REDUCIRLO MUY POR DEBAJO DE
  24.            ' ESTE 0.8 YA QUE SI LO ENCOGES MUCHO LOS TEXTOS QUEDAN ILEGIBLES.
  25.      
  26.             PorcentajeH = Me.Height / Me.Width
  27.           End If
  28.           If Me.Width < MinimoWidth Then Me.Width = MinimoWidth
  29.           If Me.WindowState <> vbMaximized Then Me.Height = Me.Width * PorcentajeH
  30.      
  31.          ' SOLO HAY QUE AJUSTAR AQUI COMO "TRUE" O "FALSE" SEGUN QUIERAS
  32.         ' AUTO-AJUSTAR O NO LOS TEXTOS Y SI QUIERES QUE SE AJUSTEN
  33.         ' SEGUN EL ALTO O SEGUN EL ANCHO DEL FORM.
  34.          AjustaControlesForm Me, AntHeight, AntWidth, True, False
  35.      
  36.           AntWidth = Me.Width
  37.           AntHeight = Me.Height
  38.      
  39.          ' AQUI VAN LOS CAMBIOS PERSONALIZADOS, COMO AJUSTAR
  40.         ' EL ALTO DE LOS LISTBOX SI HAY ALGUNO.
  41.         'List1.Height = Me.Height - 500
  42.      
  43.         End If
  44.         EnUso = 0
  45.       End Sub
' ESTE RESIZE DIFIERE DEL SIGUIENTE EN QUE MANTIENE
' LA RELACION DE ASPECTO DEL ORIGINAL.
' NO PERMITE CAMBIAR EL ALTO O EL ANCHO POR SEPARADO.
' DE ESTE MODO SIEMPRE DEBE QUEDAR BIEN AJUSTADO.
__________________
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:04
  #4 (permalink)  
Antiguo 03/07/2010, 08:18
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 18 años, 3 meses
Puntos: 29
Respuesta: Aporte: Auto-ajustar tamaño y posicion de controles

' MODO 2
' ESTE RESIZE PERMITE AJUSTAR POR SEPARADO EL ALTO Y ANCHO.
' NO MANTIENE LA RELACION DE ASPECTO ORIGINAL,
' DE MODO QUE LOS TEXTOS DE LOS BOTONES, CHECKBOX,
' LABELS, ETC... PUEDEN QUEDAR MAL AJUSTADOS.
Código vb:
Ver original
  1. Private Sub Form_Resize()
  2.         Static AntHeight As Single
  3.         Static AntWidth As Single
  4.         Static MinimoHeight As Single
  5.         Static MinimoWidth As Single
  6.         Static EnUso As Integer
  7.         If EnUso = 1 Then Exit Sub
  8.         On Local Error Resume Next
  9.         EnUso = 1
  10.         If Me.WindowState <> vbMinimized Then
  11.      
  12.           If AntWidth = 0 Then
  13.             AntWidth = Me.Width
  14.      
  15.             ' AÑADIENDO AQUI "* 0.8" CONSEGUIMOS QUE
  16.            ' EL TAMAÑO MINIMO PERMITIDO AL RESIZAR
  17.            ' SEA INFERIOR AL TAMAÑO ORIGINAL.
  18.            MinimoWidth = Me.Width * 0.8
  19.             ' SIN EMBARGO ESTO OBLIGA A USAR PARA NUESTROS
  20.            ' CONTROLES UNA FUENTE MAS FLEXIBLE, COMO "Arial".
  21.            ' AÚN ASÍ NO HAY QUE REDUCIRLO MUY POR DEBAJO DE
  22.            ' ESTE 0.8 YA QUE SI LO ENCOGES MUCHO LOS TEXTOS QUEDAN ILEGIBLES.
  23.      
  24.           End If
  25.      
  26.           If AntHeight = 0 Then
  27.             AntHeight = Me.Height
  28.      
  29.             ' LOGICAMENTE AQUI TAMBIEN HAY QUE PONER EL "* 0.8"
  30.            MinimoHeight = Me.Height * 0.8
  31.      
  32.           End If
  33.           If Me.Height < MinimoHeight Then Me.Height = MinimoHeight
  34.           If Me.Width < MinimoWidth Then Me.Width = MinimoWidth
  35.      
  36.          ' SOLO HAY QUE CAMBIAR AQUI LOS "TRUE, FALSE" SEGUN QUIERAS
  37.         ' AUTO-AJUSTAR O NO LOS TEXTOS Y SI QUIERES QUE SE AJUSTEN
  38.         ' SEGUN EL ALTO O SEGUN EL ANCHO DEL FORM.
  39.          AjustaControlesForm Me, AntHeight, AntWidth, True, False
  40.      
  41.           AntHeight = Me.Height
  42.           AntWidth = Me.Width
  43.      
  44.          ' AQUI VAN LOS CAMBIOS PERSONALIZADOS, COMO AJUSTAR
  45.         ' EL ALTO DE LOS LISTBOX SI HAY ALGUNO.
  46.         'List1.Height = Me.Height - 500
  47.      
  48.         End If
  49.         EnUso = 0
  50.       End Sub
__________________
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
  #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: 18 años, 3 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
  #6 (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: 18 años, 3 meses
Puntos: 29
Respuesta: Aporte: Auto-ajustar tamaño y posicion de controles

SOLO HAY QUE SEGUIR ALGUNAS REGLAS.

NOTA IMPORTANTE:
Una buena fuente de texto es "Arial", ya que parece ajustarse mejor a los cambios de tamaño.
Esto permite hacer un truco:
En la sub Resize, donde pone
MinimoWidth = Me.Width
MinimoHeight = Me.Height
podemos poner
MinimoWidth = Me.Width * 0.8
MinimoHeight = Me.Height * 0.8
' nota: esto ya se aplica en las subs Resize de ejemplo, no hace falta buscarlo.
De este modo se puede reducir el tamaño del form resizado más pequeño que su tamaño original.
Sin embargo eso obliga a usar una fuente que admita tamaños mas pequeños, como la "Arial".

1-CREA EL FORM LO MAS PEQUEÑO QUE PUEDAS EN VENTANA NORMAL Y COLOCA BIEN LOS CONTROLES, PERO INTENTA NO AMONTONARLOS DEMASIADO.
2-LOS LABELS DEBEN TENER LA PROPIEDAD AUTOSIZE=FALSE
3-LOS LABELS, CHECKBOX, ETC... DEBEN SER ALGO MAS GRANDES DE LO NECESARIO PARA CONTENER EL TEXTO, O TENER LA PROPIEDAD STYLE = GRAPHICAL EN EL CASO DE LOS CHECKBOX.
4-EL ALTO DE LOS LISTBOX NO SE AJUSTA BIEN.
HAY QUE AJUSTARLO A MANO DESPUES DE EJECUTAR ESTA SUB DESDE EL RESIZE.

5-PUESTO QUE EL TAMAÑO ORIGINAL ES MEMORIZADO LA PRIMERA VEZ QUE SE HACE UN RESIZE, ESTO SE EFECTUA AUTOMÁTICAMENTE LA PRIMERA VEZ QUE EL FORMULARIO SE MUESTRA.
SIN EMBARGO, SI CAMBIAS EL TAMAÑO DEL FORM DURANTE EL LOAD, SE GUARDARÁ EL NUEVO TAMAÑO COMO "ORIGINAL", PROVOCANDO QUE EL AUTOAJUSTE DE CONTROLES SEA INCORRECTO.
SI QUIERES CAMBIAR EL TAMAÑO DEL FORM DURANTE EL LOAD, HAY QUE HACER PRIMERO UN RESIZE PARA MEMORIZAR EL TAMAÑO ORIGINAL ANTES DE QUE ESTE CAMBIE.

Form_Resize
Y DESPUES PUEDES AJUSTARLO AL TAMAÑO QUE QUIERAS
Me.Height = LeerIni(FicheroINI, "Config", "TamañoH", Me.Height)
Me.Width = LeerIni(FicheroINI, "Config", "TamañoW", Me.Width)


Saludos.
__________________
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 08:51
  #7 (permalink)  
Antiguo 08/07/2010, 07:32
 
Fecha de Ingreso: noviembre-2006
Mensajes: 227
Antigüedad: 18 años
Puntos: 6
Respuesta: Aporte: Auto-ajustar tamaño y posicion de controles

Muy Buen Aporte te Felicito y muchas gracias
  #8 (permalink)  
Antiguo 08/07/2010, 07:54
Avatar de -rommel_  
Fecha de Ingreso: junio-2008
Ubicación: Lima
Mensajes: 360
Antigüedad: 16 años, 5 meses
Puntos: 1
Respuesta: Aporte: Auto-ajustar tamaño y posicion de controles

Excelente... que sigan los aportes!!!
  #9 (permalink)  
Antiguo 08/07/2010, 09:46
 
Fecha de Ingreso: noviembre-2009
Mensajes: 315
Antigüedad: 15 años
Puntos: 0
Respuesta: Aporte: Auto-ajustar tamaño y posicion de controles

Muy bueno el aporte

gracias
  #10 (permalink)  
Antiguo 09/07/2010, 12:01
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 18 años, 3 meses
Puntos: 29
Respuesta: Aporte: Auto-ajustar tamaño y posicion de controles

Me alegro mucho de que os haya gustado y espero que os sea tan útil como me está siendo a mi.

Saludos
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!

Etiquetas: controles, posicion, tamaño, aportes
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 14:17.