lunes, 1 de marzo de 2010

P1E13 – Colores con scrollbar

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.

image

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:

  1. 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.
  2. 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.
  3. 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).
  4. 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.