miércoles, 12 de mayo de 2010

Control Frame

Descripción

El Frame es un control que se utiliza como contenedor de otros controles, de esta manera los podemos agrupar.
Por ejemplo como muestra la siguiente imagen:




Para colocar controles dentro de un Frame, lo que debemos hacer es seleccionar del cuadro de controles de visual basic el que queramos, y dibujarlo dentro del mismo. Automáticamente este quedará dentro del frame
Para asegurarnos que realmente lo está, podemos desplazarlo hasta el límite del Frame y ver que el control desaparece, para que se entienda mejor mirar la siguiente imagen:




Podemos ver que el Command1 si lo corremos al limite derecho del Frame este desaparece, si no ocurriera esto el control no estaría dentro del mismo.
Otra forma de colocar los controles dentro de un Frame es, por ejemplo si tenemos 5 controles en un formulario y los quisiéramos colocar dentro, los seleccionaríamos haciendo Click izquierdo y manteniendo presionada la tecla Ctrl. Una vez que están todos seleccionados, desplegamos el menú Edición, seleccionamos Cortar, luego seleccionamos el control Frame y elegimos la opción Pegar.


Propiedades

Propiedad Caption:


Caption es la propiedad por defecto del control Frame y lo que hace es mostrar un texto a modo de título en la parte superior para el marco.
Para asignar el texto lo podemos hacer desde la ventana de propiedades de vb y seleccionar dicha propiedad, o si la establecemos mediante código en tiempo de ejecución lo haríamos así

Texto plano Copiar Codigo Fuente



1. Option Explicit
2.
3. Private Sub Command1_Click()
4. ' -- Cambiar el caption
5. Frame1.Caption = "Texto del Frame"
6. End Sub
7.







Option Explicit
Private Sub Command1_Click()
' -- Cambiar el caption
Frame1.Caption = "Texto del Frame"
End Sub




Propiedad BorderStyle
Esta propiedad que posee el valor 0 y 1, indica si el Frame tendrá o no un borde. La siguiente imagen muestra en la izquierda un Frame con el BorderStyle en 0 mientras que a la derecha un Frame con el BorderStyle en 1











Una cosa importante es que si le quitamos el borde al control, el caption o texto del Frame no se visualizará.

Otras propiedades comunes


· Font : permite establecer el tipo de fuente : Negrita, subrayado, el tamaño, cursiva,
tachado, etc .., y la propiedad
· ForeColor: permite establecer el color de la fuente.
· BackColor : el color de fondo del objeto
· Enabled : Determina si está habilitado o no el Frame.
· Height y Width : Determina el alto y ancho del control respectivamente.
· Left y Top: Determina la posición izquierda y superior en el contenedor, por lo general en el formulario, aun que puede ser cualquier otro que actué como contenedor de controles, como es el caso de un PictureBox.
· Visible : Devuelve y establece si el Frame se encuentra o no visible.

Ejemplos varios

Recorrer todos los Frame de un formulario

Si en algún momento es necesario poder averiguar todos los controles Frame que se encuentran en el formulario actual, por ejemplo para cambiarle alguna propiedad, es posible utilizar un bucle For Each y mediante el operador TypeOf de Visual basic, comprobar el tipo de objeto. Ejemplo
Lo siguiente es un simple ejemplo que recorre todos los controles del formulario, y dentro del bucle se verifica la clase de control. Si el control es un Frame, entonces le cambia la propieda Enabled a True o False dependiendo del valor del CheckBox, y también le cambia la propiedad Enabled a los controles que se encuentren dentro de los Frames
Colocar un CheckBox en el formulario, algunos frames por ejemplo, y dentro de los frames algunos controles
Código fuente en el formulario

Texto plano Copiar Codigo Fuente


1. Option Explicit
2.
3. ' -- Caja de verificación para habilitar y deshabilitar
4. Private Sub Check1_Click()
5. Call EnabledDisabledFrames(Abs(Check1.Value))
6. End Sub
7.
8. ' -- Sub para cambiar el Enabled y el forecolor de los frames.
9. ' ----------------------------------------------------------------------------------
10. Private Sub EnabledDisabledFrames(ByVal bValue As Boolean)
11.
12. Dim xControl As Control
13. ' -- recorrer la colección de controles del formulario
14. For Each xControl In Me.Controls
15. ' -- Comprobar el tipo de control con TypeOf
16. If TypeOf xControl Is Frame Then
17. xControl.Enabled = bValue ' - - Habilitar o deshabilitar
18. End If
19. ' -- Desactivar controlador de error por si el control
20. ' -- no posee la propiedad Container, como por ejemplo los Line, Shape etc ..

21. On Error Resume Next
22. ' -- Si el control x está dentro del frame, entonces ...
23. If TypeOf xControl.Container Is Frame Then
24. xControl.Enabled = bValue ' -- Activar o desactivar
25. End If
26. On Error GoTo 0
27. Next
28.
29. End Sub
30.
31. Private Sub Form_Load()
32. With Check1
33. .Caption = "Habilitar / Deshabilitar Frames"
34. .Value = 1
35. End With
36. End Sub
37.
38.




Option Explicit

' -- Caja de verificación para habilitar y deshabilitar
Private Sub Check1_Click()
Call EnabledDisabledFrames(Abs(Check1.Value))
End Sub
' -- Sub para cambiar el Enabled y el forecolor de los frames.
' ----------------------------------------------------------------------------------
Private Sub EnabledDisabledFrames(ByVal bValue As Boolean)

Dim xControl As Control
' -- recorrer la colección de controles del formulario
For Each xControl In Me.Controls
' -- Comprobar el tipo de control con TypeOf
If TypeOf xControl Is Frame Then
xControl.Enabled = bValue ' - - Habilitar o deshabilitar
End If
' -- Desactivar controlador de error por si el control
' -- no posee la propiedad Container, como por ejemplo los Line, Shape etc ..
On Error Resume Next
' -- Si el control x está dentro del frame, entonces ...
If TypeOf xControl.Container Is Frame Then
xControl.Enabled = bValue ' -- Activar o desactivar
End If
On Error GoTo 0
Next

End Sub

Private Sub Form_Load()
With Check1
.Caption = "Habilitar / Deshabilitar Frames"
.Value = 1
End With
End Sub


Ajustar el control a las dimensiones del formulario

Lo siguiente , al maximizar o cambiar las dimensiones de la ventana, se ajusta el tamaño del frame modificando el ancho y alto del control.
Colocar un Frame y un Botón de comando

Texto plano Copiar Codigo Fuente

1. Option Explicit
2.
3.
4. Private Sub Form_Resize()
5.
6. Dim lFrameHeight As Long
7.
8. lFrameHeight = Me.ScaleHeight - 100 - Command1.Height
9.
10. ' -- Para evitar errores en valores negativos
11. If lFrameHeight < color="#3333ff">Then
lframeheight =" 0" 12.
13. ' -- Posicionar y ajustar Frame
14. With Frame1
15. .Move 50, 10, Me.ScaleWidth - 75, lFrameHeight

16. End With
17.
18. ' -- Posicionar y ajustar el botón en la parte inferior derecha de la ventana
19. With Command1
20. .Top = Frame1.Top + Frame1.Height + 50
21. .Left = Frame1.Left + Frame1.Width - .Width
22. End With
23.
24. End Sub
25.
26.
27. Private Sub Command1_Click()
28. Unload Me
29. End Sub
30.
31. Private Sub Form_Load()
32. Command1.Caption = "Salir .."
33. End Sub
34.







Option Explicit

Private Sub Form_Resize()

Dim lFrameHeight As Long

lFrameHeight = Me.ScaleHeight - 100 - Command1.Height

' -- Para evitar errores en valores negativos

If lFrameHeight < lframeheight =" 0">

' -- Posicionar y ajustar Frame

With Frame1
.Move 50, 10, Me.ScaleWidth - 75, lFrameHeight
End With

' -- Posicionar y ajustar el botón en la parte inferior derecha de la ventana
With Command1
.Top = Frame1.Top + Frame1.Height + 50
.Left = Frame1.Left + Frame1.Width - .Width
End With


End Sub

Private Sub Command1_Click()
Unload Me
End Sub

Private Sub Form_Load()
Command1.Caption = "Salir .."
End Sub



Crear Frame en tiempo de ejecución

Este código , crea un control en tiempo de ejecución utilizando el método Add de la colección Controls de los formularios, y declara una variable de tipo "Frame" con la palabra reservada Withevents de Visual basic para poder acceder a los eventos del mismo, como cualquier otro Frame, es decir los eventos clic, DobleClic, etc ..
Código fuente en el formulario principal:



Texto plano Copiar Codigo Fuente


1. Option Explicit
2.
3. ' -- Variable con evento para crear el objeto / control
4. Private WithEvents mFrame As Frame
5.
6. Private Sub Form_Load()
7. ' -- Crear Frame con Controls.Add y asignarlo a mFrame
8. Set mFrame = Me.Controls.Add("vb.Frame", "NombreDelFrame")
9.
10. ' -- Establecerle propiedades
11. With mFrame
12. ' -- Posicionarlo y establecer dimensión
13. .Move 500, 500, Me.ScaleWidth - 1000, Me.ScaleHeight - 1000
14. ' -- Otras
15. .Caption = "Frame creado en tiempo de ejecución"
16. .Font.Size = 10
17. .Font.Bold = True
18. .Visible = True ' -- Hacerlo visible
19. End With
20.
21. End Sub
22.
23. ' \\ -- Evento
24. Private Sub mFrame_Click()
25. MsgBox "Clic en el Frame", vbInformation
26. End Sub
27.
28. ' \\ -- Eliminar control y variable de referencia cuando ya no se utilice
29. Private Sub Form_Unload(Cancel As Integer)
30. Me.Controls.Remove "NombreDelFrame"
31. Set mFrame = Nothing
32.
End Sub



Option Explicit
' -- Variable con evento para crear el objeto / control
Private WithEvents mFrame As Frame
Private Sub Form_Load()
' -- Crear Frame con Controls.Add y asignarlo a mFrame
Set mFrame = Me.Controls.Add("vb.Frame", "NombreDelFrame")

' -- Establecerle propiedades
With mFrame
' -- Posicionarlo y establecer dimensión
.Move 500, 500, Me.ScaleWidth - 1000, Me.ScaleHeight - 1000
' -- Otras
.Caption = "Frame creado en tiempo de ejecución"
.Font.Size = 10
.Font.Bold = True
.Visible = True ' -- Hacerlo visible
End With

End Sub
' \\ -- Evento
Private Sub mFrame_Click()
MsgBox "Clic en el Frame", vbInformation
End Sub
' \\ -- Eliminar control y variable de referencia cuando ya no se utilice
Private Sub Form_Unload(Cancel As Integer)
Me.Controls.Remove "NombreDelFrame"
Set mFrame = Nothing
End Sub

Establecer los temas de windows

Por defecto los controles de los programas en Visual basic, no visualizan el tema actual presente en el sistema. Para realizar esto podés mirar el siguiente enlace que contiene un ejemplo para poder visualizar los frames con la apariencia del tema actual, junto con el resto de controles. Ver ejemplo

Volver al índice

Enlaces relacionados
Ocx para usar Frames con estilos XP
Ocx para usar frame personalizable
Cambiar el color de los bordes
Realizar Drag Drop en un Frame






No hay comentarios:

Publicar un comentario