Curso Entrega 4:

En este primer ejercicio me gustaría mostrarles el desplazamiento mediante el uso de ScrollBar de una imagen(Picture) grande en un contenedor más pequeño(Picture) usando dos controles Scrollbar, uno vertical y otro horizontal.

El programa se ve así:

 

En el control picture de la izquierda tenemos la imagen en su tamaño normal, y en el Picture de la derecha tenemos dos barras de scroll que nos permiten desplazarla dentro de una Picture más pequeña. El código es:

Private Sub Form_Load()
HScroll1.Min = 0
HScroll1.Max = ScaleX(Picture1.Picture.Width, 8, vbTwips) - Picture2.Width
HScroll1.LargeChange = 10 * Screen.TwipsPerPixelX
HScroll1.SmallChange = Screen.TwipsPerPixelX

VScroll1.Min = 0
VScroll1.Max = ScaleY(Picture1.Picture.Height, 8, vbTwips) - Picture2.Height
VScroll1.LargeChange = 10 * Screen.TwipsPerPixelY
VScroll1.SmallChange = Screen.TwipsPerPixelY
End Sub

Private Sub HScroll1_Change()
Picture2.PaintPicture Picture1.Picture, 0, 0, Picture2.Width, Picture2.Height, HScroll1.Value, VScroll1.Value, Picture2.Width, Picture2.Height
End Sub

Private Sub HScroll1_Scroll()
Picture2.PaintPicture Picture1.Picture, 0, 0, Picture2.Width, Picture2.Height, HScroll1.Value, VScroll1.Value, Picture2.Width, Picture2.Height
End Sub

Private Sub VScroll1_Change()
Picture2.PaintPicture Picture1.Picture, 0, 0, Picture2.Width, Picture2.Height, HScroll1.Value, VScroll1.Value, Picture2.Width, Picture2.Height
End Sub

Private Sub VScroll1_Scroll()
Picture2.PaintPicture Picture1.Picture, 0, 0, Picture2.Width, Picture2.Height, HScroll1.Value, VScroll1.Value, Picture2.Width, Picture2.Height
End Sub

Vamos a ir explicando este código. En el procedimiento Load del formulario (o sea al cargarse el formulario) determinamos el valor de las propiedades Min y Max de los ScrollBar. Esto determina un valor mínimo de 0 y un valor máximo determinado por el método ScaleX, cuyos argumentos serán: el ancho de la Picture que tiene la imagen completa y por defecto el modo de escala en Twips y le restamos el ancho de la Picture2 que tiene los Scrollbars. Esto mismo lo hacemos para La Barra vertical usando el metodo ScaleY. Luego determinamos las propiedades LargeChange : en este caso modificamos los twips a pixels y lo multiplicamos por 10, esto será lo que cambiara la imagen cada vez que hagamos Click en la Barra del Scrollbar y la propiedad SmallChange, cambiándola a Pixel solo modificara un Pixel cada vez que hagamos Click en la flecha del ScrollBar.

Nos quedan ahora dos procedimientos: El Scroll_Change y el Scroll_Scroll: el primero ocurre cuando cambiamos el valor de la propiedad value o sea el valor que devuelve la posición en el Scrollbar entre el valor máximo y mínimo. Y el ScrollScroll que es cuando se reposiciona desplazando la barra.

Esto lo combinamos con el Metodo PaintPicture que redibuja una imagen. Y cuyos argumentos son:

Objeto.PaintPicture Picture, x1,y1, ancho1,alto1,x2,y2,ancho2,alto2,Codigo de operación. (Para aclarar más el tema consulten la Ayuda de VB5). El objeto habla del control destino adonde desplegamos la imagen. En este caso Picture2, el metodo PaintPicture que lo dibuja y el argumento picture hace alusión al origen , o sea la imagen a desplegar en este caso la Picture1,luego las coordenada 0,0 para X, Y, el ancho de la Picture2,el alto de la Picture2, el valor del scroll horizontal, el valor del scrollvertical, y otra vez el ancho y alto de la Picture2, donde se vuelca la Picture1.En este caso no se usa ningún código de operaciones de rastreo, porque no se requieren métodos de transparencia para animaciones, ni de copia especiales.

Hay dos controles que me gustaría ejemplificar: Las listas desplegables y los botones de Opcion o selección.

El segundo ejercicio utiliza un ComboBox. La imagen del formulario es así:


Y el código que lo acompaña:

Private Sub Command1_Click() 'copia el item seleccionado o clickeado a la caja de 'texto.
Text1.Text = Combo1.Text

End Sub

Private Sub Command2_Click()' permite agrgar item en tiempo de ejecución
Dim item As String ' declara la variable contenedora de la cadena a agregar

item = InputBox("Escriba la Opción que desea Agregar", "Agregar")'abre una ventana 'de entrada de texto. Funcion InputBox.
Combo1.AddItem item ' la propiedad AddItem agrega el item a la lista del control.

End Sub

Private Sub Command3_Click()
Combo1.RemoveItem (Combo1.ListIndex)' Elimina el item del control Combo1

End Sub

Private Sub Form_Load()' agrega al cargar el formulario los siguientes items.
Combo1.AddItem "Ir a la Costa"
Combo1.AddItem "Navegar por Internet"
End Sub

En este tercer ejercicio vamos a usar los botones de Opcion y los Check. El formulario se ve así:

Al hacer click en el botón: Prueba de texto, de acuerdo a las selecciones hechas en los Option y Check se modifican los resultados de la Label que dice: Buenas Tardes.

El código es el siguiente:

Private Sub Command1_Click() ' Botón que ejecuta los cambios
If Option1.Value = True Then
Label1.ForeColor = RGB(255, 0, 0)
ElseIf Option2.Value = True Then
Label1.ForeColor = RGB(0, 255, 0)
ElseIf Option3.Value = True Then
Label1.ForeColor = RGB(0, 0, 255)
End If

If Check1 = 1 Then
Label1.FontBold = True
Else
Label1.FontBold = False
End If
If Check2 = 1 Then
Label1.FontItalic = True
Else
Label1.FontItalic = False
End If
End Sub

Un condicional compuesto chequea si los CheckBox han sido seleccionados y varios condicionales simples cuál botón de opción es el seleccionado.

La diferencia fundamental entre un botón de opción y un check: es que el boton de opción permite una única selección, si yo cambio la selección se desactiva la anterior, solo puedo elegir uno. En cambio el Check permite varias selecciones simultáneas o sea al mismo tiempo. Esto es muy útil para construir evaluaciones cerradas para nuestros alumnos, donde a veces las respuestas correctas son varias, o la combinación de varias y otras sólo una respuesta es la correcta. Por ejemplo: no es lo mismo si yo pregunto ¿Cuál es la Capital de la República Argentina? y doy varias opciones que si pregunto ¿Cuales son los colores primarios? y doy seis opciones. En el primer caso usaré un OptionButton y en el segundo CheckBox.

Otra propiedad importante a tener en cuenta es el valor de estos controles, o sea la propiedad Value que permite determinar si están activados o desactivados. En el caso del Option los valores son: False/True y en el Check: 0/1.

Para completar este ejercicio le vamos a agregar un Menú que realice el mismo trabajo que los Option y los Check. Para eso usamos el Editor de Menú que trae Visual Basic.

Lo podemos encontrar en la barra de iconos y la imagen es la siguiente:

Al abrirlo se nos presenta la siguiente ventana:

Aquí vamos confeccionando un menú cuyos componentes son: estilo de Fuente: Color y Estilo y a su vez dentro de Color tenemos como subtemas: Rojo, Verde, Azul y dentro de estilo: Negrita y Cursiva. Presten atención a la propiedad Caption: que mostrará el titulo del item del menú y a Name que es el nombre interno para que lo identifique VB. En este caso precedidos por mnu para distinguir los procedimientos del editor de los de la Aplicación.

El código que debemos agregar es:

Private Sub mnuColorOpciones_Click(Index As Integer) 'Hacemos un Array en la 'casilla Index los numeramos
Select Case Index
Case 1
mnuColorOpciones(1).Checked = True
mnuColorOpciones(2).Checked = False
mnuColorOpciones(3).Checked = False
Label1.ForeColor = RGB(255, 0, 0) ' color verde
Case 2
mnuColorOpciones(2).Checked = True
mnuColorOpciones(1).Checked = False
mnuColorOpciones(3).Checked = False
Label1.ForeColor = RGB(0, 255, 0) ' color rojo
Case 3
mnuColorOpciones(3).Checked = True
mnuColorOpciones(2).Checked = False
mnuColorOpciones(1).Checked = False
Label1.ForeColor = RGB(0, 0, 255) ' color azul
End Select
End Sub

Private Sub mnuEstiloOpciones_Click(Index As Integer)'hacemos un Array
Select Case Index
Case 1
mnuEstiloOpciones(1).Checked = True
mnuEstiloOpciones(2).Checked = False
Label1.FontBold = True 'negrita activada
Case 2
mnuEstiloOpciones(2).Checked = True
mnuEstiloOpciones(1).Checked = False
Label1.FontItalic = True 'cursiva activada
End Select
End Sub

Creamos dos array con el mismo name pero distinto Index: mnuColorOpciones y mnuEstiloOpciones. Con el mismo nombre pero distinto indice, debemos en el Select Case chequear si fue seleccionado o no del Menú, con la propiedad Checked a True o False y en base a eso habilitamos los colores y las opciones de estilo.

Un abrazo para todos y hasta la próxima.

Mirta

 

Entrega 1 - Entrega 2 - Entrega 3 - Entrega 4 - Entrega 5 - Entrega 6 - Entrega 7 - Entrega 8