Ver Mensaje Individual
  #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: 17 años, 8 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!