sábado, 12 de noviembre de 2016

Visual Basic

·    Armar una tabla de multiplicar.
En este ejercicio pretendemos introducir un “valor X”, un número, y que el programa sea capaz de mostrar la tabla de multiplicar del número introducido.
Empezaremos con el diseño del formulario, el formulario quedará así:

           2 labels                         1 text                         2 Commandbutton

 

Haremos doble “clic” en el primer botón “Ver Tabla” y desde la pantalla de código introduciremos:

En la rutina del “command1_click” Private Sub Command1_Click() a = 1
R = 0
Label2.Caption = "" For a = 1 To 10
Label2.Caption = Label2.Caption + Trim(Str(a)) + " *" + Str(Text1.Text) + " = " +  Str(a * Text1.Text) + Chr(13) + Chr(13)
Next a
End Sub

En la rutina del “command2_ click” Private Sub Command2_Click() End
End Sub


Ejercicio Nº 14: Una Animación Transparente.

Uno de los temas más queridos relacionados con la programación para nosotros es el tema de las Animaciones. Poco a Poco vamos a ir desarrollando ejercicios que vayan perfeccionando y mostrando distintas formas de crear animaciones en Visual Basic. Las que vimos hasta ahora usando el método Move , el control PictureClip, y las secuencias de images o pictures activadas con un Timer, son las formas más primitivas y sencillas de animación.
Hoy sumamos el Método PaintPicture que dibuja una imagen sobre un fondo , pero al combinar mediante las constantes SRCAND y SRCINVERT dos versiones de la imagen: la máscara y el sprite o animación en sí permite trasparentar el fondo.
En este caso vamos a desplegar la animación sobre un control Picture con una imagen de fondo, pero podemos hacerlo sobre el formulario y cargar en este una imagen. Lo que debemos tener en cuenta es que el objeto sobre el que se despliega la animación debe estar la propiedad ScaleMode en Pixel y no en Twips como lo es por defecto.
Las constantes para desplegar métodos gráficos como SRCAnd y SRCINvert deben declararse en la parte General del Formulario. Pueden copiarse a mano o a través del Visor de Apis.
Usamos dos controles PictureClip uno para la máscar y otro para el Sprite (Ver Controles favoritos: PictureClip). Un Timer para desplegar la secuencia de los frames que componen la grilla en este caso la imagen completa del perro se compone de 4 columnas y 1 fila. Y un CommandButton que regula el inicio y fin de la animación.
Const SRCAND = &H8800C6 ' (DWORD) dest = origen AND dest
Const SRCINVERT = &H660046 ' (DWORD) dest = origen XOR dest
Const SRCCOPY = &HCC0020 ' (DWORD) dest = origen
Private Sub Command1_Click()
If Command1.Caption = "Animación" Then
Timer1.Enabled = True
Picture1.Refresh
'esta propiedad Refresh es muy importante ya que refresca el fondo para 'cambiar de cuadro en la secuencia.
Command1.Caption = "Detener"
Else
Timer1.Enabled = False
Command1.Caption = "Animación"
End If
End Sub
Private Sub Command2_Click()
End
End Sub
Private Sub Form_Load()
PictureClip1.Cols = 4
PictureClip1.Rows = 1
PictureClip2.Cols = 4
PictureClip2.Rows = 1
'Es mejor determinar la composición de la grilla por código ya que a veces 'al salir del programa el control Pictureclip no retiene los valores de la 'ventana de propiedades y vuele a su 1 a 1 por defecto.
End Sub
Private Sub Timer1_Timer()
Picture1.Refresh
Dim x As Single, y As Single
Static imagenactual As Integer
Static xactual As Integer
If imagenactual > 3 Then imagenactual = 0
If imagenactual < 0 Then imagenactual = 0
If xactual > 500 Then xactual = 0
If xactual < 0 Then xactual = 0
'Estos condicionales regulan la secuencia de los cuadros de la animación, 'reiniciándola y el movimiento cuando se escapa de la picture 'posicionándose otra vez al comienzo del margen izquierdo.
Picture1.PaintPicture PictureClip2.GraphicCell(imagenactual), xactual, 220, , , , , , , SRCAND 'esta sintaxis debe estar en un solo renglón
Picture1.PaintPicture PictureClip1.GraphicCell(imagenactual), xactual, 220, , , , , , , SRCINVERT 'esta sintaxis debe estar en un solo renglón
imagenactual = imagenactual + 1
'avanza un cuadro la secuencia
xactual = xactual + 20
' se mueve 20 pixels a la derecha.
End Sub