Se te recomienda antes de hacer cualquier ejercicio leerlo completamente, al estarlo realizando anota todas las preguntas o dudas que te surjan para su aclaración en clase, asi como los elementos nuevos que descubras.
El archivo del formulario de este proyecto se puede llamar frmColores.frm.
En este ejemplo se dispone de tres barras de desplazamiento con las que pueden controlarse las componentes RGB del color del fondo y del color del texto de un control label. Dos botones de opción permiten determinar si los valores de las barras se aplican al fondo o al texto. Cuando se cambia del texto al fondo o viceversa los valores de las barras de desplazamiento (y la posición de los cursores) cambian de modo acorde.
A la derecha de las barras de desplazamiento tres cajas de texto contienen los valores numéricos de los tres colores (entre 0 y 255). A la izquierda tres labels indican los colores de las tres barras.
A continuación se muestra una tabla con los controles y las propiedades utilizadas en el este ejemplo.
Form1
Name | frmColores |
Caption | Colores |
Label1
Name | lblCuadro |
Caption | Visual Basic |
Font | MS Sans Serif, Bold, 24 |
Command1
Name | cmdSalir |
Caption | Salir |
Font | MS Sans Serif, Bold, 10 |
Option1*
Name | optColor |
Index | 0, 1 |
Caption | Fondo, Texto |
Font | MS Sans Serif, Bold, 10 |
*copiar y pegar botón creando matriz de controles, lo único diferente es el index.
hsbScroll1*
Name | hsbColor |
Min | 1 |
Max | 255 |
SmallChange | 1 |
LargeChange | 16 |
Index | 0, 1, 2 |
Value | 0 |
*copiar y pegar scrollbar creando matriz de controles (son tres).
Text1*
Name | txtColor |
Text | 0 |
Locked | True |
Index | 0, 1, 2 |
*copiar y pegar textbox creando matriz de controles (son tres).
Label2*
Name | lblColor |
Caption | Rojo, Verde, Azul |
Index | 0,1, 2 |
Font | MS Sans Serif, 10 |
*copiar y pegar label creando matriz de controles (son tres).
Una característica importante de este ejemplo es que se han utilizado vectores (arrays) de controles. Las tres barras se llaman hsbColor y se diferencian por la propiedad Index, que toma los valores 0, 1 y 2. También las tres cajas de texto, las tres labels y los dos botones de opción son arrays de controles. Para crear un array de controles basta crear el primero de ellos y luego hacer Copy y Paste tantas veces como se desee, respondiendo afirmativamente al cuadro de diálogo que pregunta si desea crear un array.
El procedimiento Sub que contiene el código que gestiona un evento de un array es único para todo el array, y recibe como argumento la propiedad Index. De este modo que se puede saber exactamente en qué control del array se ha producido el evento. Así pues, una ventaja de los arrays de controles es que pueden compartir el código de los eventos y permitir un tratamiento conjunto por medio de bucles for. A continuación se muestra el código correspondiente a los procedimientos que tratan los eventos de este ejemplo.
Option Explicit
Public Brojo, Bverde, Bazul As Integer
Public Frojo, Fverde, Fazul As Integer
Private Sub cmdSalir_Click()
End
End Sub
Private Sub Form_Load()
Brojo = 0
Bverde = 0
Bazul = 0
Frojo = 255
Fverde = 255
Fazul = 255
lblCuadro.BackColor = RGB(Brojo, Bverde, Bazul
lblCuadro.ForeColor = RGB(Frojo, Fverde, Fazul)
End Sub
Private Sub hsbColor_Change(Index As Integer)
Dim i As Integer
If optColor(0).Value = True Then
lblCuadro.BackColor = RGB(hsbColor(0).Value, hsbColor(1).Value, _ hsbColor(2).Value)
For i = 0 To 2
txtColor(i).Text = hsbColor(i).Value
Next i
Else
lblCuadro.ForeColor = RGB(hsbColor(0).Value, hsbColor(1).Value, hsbColor(2).Value)
For i = 0 To 2
txtColor(i).Text = hsbColor(i).Value
Next i
End If
End Sub
Private Sub optColor_Click(Index As Integer)
If Index = 0 Then ‘Se pasa a cambiar el fondo
Frojo = hsbColor(0).Value
Fverde = hsbColor(1).Value
Fazul = hsbColor(2).Value
hsbColor(0).Value = Brojo
hsbColor(1).Value = Bverde
hsbColor(2).Value = Bazul
Else ’Se pasa a cambiar el texto
Brojo = hsbColor(0).Value
Bverde = hsbColor(1).Value
Bazul = hsbColor(2).Value
hsbColor(0).Value = Frojo
hsbColor(1).Value = Fverde
hsbColor(2).Value = Fazul
End If
End Sub
El código de este ejemplo es un poco más complicado que el de los ejemplos anteriores y requiere unas ciertas explicaciones adicionales adelantando cuestiones que se verán posteriormente:
- La función RGB() crea un código de color a partir de sus argumentos: los componentes RGB (Red, Green and Blue). Estos componentes, cuyo valor se almacena en un byte y puede oscilar entre 0 y 255, se determinan por medio de las tres barras de desplazamiento.
- El color blanco se obtiene con los tres colores fundamentales a su máxima intensidad. El color negro se obtiene con los tres colores RGB a cero. También se pueden introducir con las constantes predefinidas vbWhite y vbBlack, respectivamente.
- Es importante disponer de unas variables globales que almacenen los colores del fondo y del texto, y que permitan tanto guardar los valores anteriores de las barras como cambiar éstas a sus nuevos valores cuando se cliquea en los botones de opción. Las variables globales, definidas en la parte de definiciones generales del código, fuera de cualquier procedimiento, son visibles desde cualquier parte del programa. Las variables definidas dentro de una función o procedimiento sólo son visibles desde dentro de dicha función o procedimiento (variables locales).
- La función hsbColor_Change(Index As Integer) se activa cada vez que se cambia el valor en cualquiera de las barras de desplazamiento. El argumento Index, que Visual Basic define automáticamente, indica cuál de las barras del array es la que ha cambiado de valor (la 0, la 1 ó la 2). En este ejemplo dicho argumento no se ha utilizado, pero está disponible por si se hubiera querido utilizar en el código.