INSTRUCCIONES GRAFICAS EN VISUAL BASIC

Volver Apuntes Visual Basic

La resolución del formulario se establece con la propiedad ScaleMode que tiene los siguientes valores:

Valor    Descripción
0    Indica que una o más de las propiedades ScaleHeight, ScaleWidth, ScaleLeft y ScaleTop tienen valores personalizados.
1    (Predeterminado) Twip (1440 twips por pulgada lógica;
2    Punto (72 puntos por pulgada lógica).
3    Píxel (la unidad mínima de resolución del monitor o la impresora).
4    Carácter  (horizontal = 120 twips por unidad; vertical = 240 twips por unidad).
5    Pulgada.
6    Milímetro.
7    Centímetro.

Normalmente se deja en twips y se modifican las propiedades ScaleHeight,ScaleWidth,ScaleLeft y ScaleTop.

Utilizando las propiedades relacionadas ScaleHeight, ScaleWidth, ScaleLeft y ScaleTop, se puede configurar un sistema de coordenadas completo, con coordenadas positivas y negativas. Estas cuatro propiedades de escala se relacionan con la propiedad ScaleMode de la siguiente forma:
Al establecer un valor en cualquier otra propiedad de escala, en ScaleMode se establece automáticamente 0.
Al establecer en ScaleMode un número mayor que 0, ScaleHeight y ScaleWidth cambian a la nueva unidad de medida, y en ScaleLeft y ScaleTop se establece 0. Además, los valores de CurrentX y CurrentY cambian para reflejar las nuevas coordendadas del punto actual.

g1.gif (4384 bytes) Crea un nuevo proyecto en visual Basic y añade un botón de acción con el siguiente código:

Private Sub Command1_Click()
ScaleMode = 3
ScaleLeft = -100
ScaleTop = -100
ScaleWidth = 200
ScaleHeight = 200
Line (-100, -100)-(100, 100)
Circle (-50, 50), 25
End Sub

Al ejecutarlo obtendrás una diagonal y un círculo en el cuadrante inferior izquierdo.
Añade las siguientes lineas para obtener nuevos elementos:

g2.gif (6294 bytes) Private Sub Command1_Click()
ScaleMode = 3
ScaleLeft = -100
ScaleTop = -100
ScaleWidth = 200
ScaleHeight = 200
DrawWidth = 2 ' Establece DrawWidth.
ForeColor = QBColor(4)
Line (0, 0)-(100, 100), QBColor(14), BF
Line (-100, -100)-(0, 0), &H8000&, BF
Line (-50, -50)-(0, 0), RGB(255, 255, 0), BF
FillColor = QBColor(Int(Rnd * 15))
FillStyle = Int(Rnd * 8) 'Valor FillStyle aleatorio.
Circle (-50, 50), 25
End Sub
Crea un nuevo proyecto añadiendo el código siguiente al botón de acción:

g3.gif (4194 bytes)

Private Sub Command1_Click()
pi = 3.141592
ScaleMode = 3
ScaleLeft = -100
ScaleTop = -100
ScaleWidth = 200
ScaleHeight = 200
DrawWidth = 1 ' Establece DrawWidth.
ForeColor = QBColor(4)
Line (-100, 0)-(100, 0)
Line (0, -100)-(0, 100)
For x = -100 To 100
y = Sin(x * pi / 180)
PSet (x, y * 100), QBColor(4)
Next
FillColor = QBColor(Int(Rnd * 15))   
FillStyle = Int(Rnd * 8) 'Valor FillStyle aleatorio.
End Sub
Las coordenadas de pantalla se establecen entre -100 y 100
El grosor de los puntos se pone a 1 y el color 4 (rojo)
Las dos instrucciones Line dibujan los ejes de coordenadas
y el bucle calcula el seno de -100 a 100 (radianes) dibujan
dose los puntos en las coordenadas x,y con Pset
Como el valor calculado de seno es pequeño, se multiplica por 100 para apreciar mejor la forma característica.
Modifica el programa para calcular el coseno y la tangente.
Para evitar un desbordamiento al calcular el valor de  y introduce estas líneas:
If y < -100 Then y = -100
If y > 100 Then y = 100

 

g4.gif (4388 bytes)

g5.gif (4412 bytes)
En el siguiente ejemplo crea un nuevo proyecto e introduce un temporizador Timer, un PictureBox y un botón de acción.
Haz doble click sobre el Timer y escribe:
Private Sub Timer1_Timer()
  BackColor = QBColor(Rnd * 15)
  ForeColor = QBColor(Rnd * 10)
  Picture1.BackColor = QBColor(Rnd * 15)
  Picture1.ForeColor = QBColor(Rnd * 10)
End Sub

Al botón añádele este código:
Private Sub Command1_Click()
Timer1.Interval = 500   'activa el temporizador
End Sub

Cuando lo ejecutes observa como cambian de color tanto el rectángulo del Picturebox como el fondo del formulario.
El color se asigna a la propiedad BackColor o ForeColor del formulario o de la caja de imagen al azar con la instrucción QBColor(Rnd*15)

Ahora selecciona el PictureBox y haz doble click para entrar en la ventana de código. Selecciona el evento MouseMove y escribe la instrucción siguiente:
Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Picture1.PSet (X, Y), QBColor(Rnd * 15)
End Sub

Este evento captura la posción del ratón en las variables X e Y dibujando en las coordenadas correspondientes del cuadro de imagen con un color al azar cuando el puntero del ratón pasa sobre él.

Image31.gif (2994 bytes)
El siguiente programa calcula el área de un triángulo según la formula de Herón. Crea un proyecto nuevo y añade 3 cuadros de texto, una etiqueta Label, un control image y un botón de acción. Haz click sobre la propiedad picture del control image y busca el fichero triangulo.gif.
En el evento click del botón escribe el código que ves a a la derecha. Se crean 3 variables enteras y 2 de simple precisión.
En las variables A,B y C se almacena el contenido de los cuadros de texto (lados del triángulo) convertidos a números con CInt y se comprueba que el triángulo pueda existir, deteniéndose el programa en caso contrario.
Private Sub Command1_Click()
Dim A, B, C As Integer
Dim P, S As Single
A = CInt(text1)
B = CInt(text2)
C = CInt(text3)
If ((A + B) < C) Or ((A + C) < B) Or ((B + C) < A) Then
   MsgBox ("Triángulo imposible")
   End
End If
P = (A + B + C) / 2
S = (P * (P - A) * (P - B) * (P - C)) ^ 0.5
Label1 = "El área del triángulo es: " + CStr(S)
End Sub
Image32.gif (6720 bytes) Si es correcto se calcula el perímetro en P y el área en S, mostrándose en la etiqueta Label1.Si los valores introducidos en los cuadros de texto no permiten construir el triángulo la instrucción MsgBox("..") mostrará una ventana modal con el aviso entre comillas y a continuación la instrucción End detendrá el programa.

 

 

Image33.gif (6225 bytes) Crea este programa, ejecútalo y mueve el ratón sobre el formulario:
Las instrucciones gráficas pueden utilizarse junto con la orden print para mostrar cadenas de texto en cualquier posición del formulario. En el programa siguiente, en el evento MouseMove del formulario, se establece la unidad de medida (ScaleMode 3) en pixels y se calculan valores al azar (Rnd) para las propiedades CurrentX y CurrentY del formulario guardan la posición donde se situa el cursor gráfico.
A continuación se dibujan círculos con radio variable de 0 a 50 y con centro en estas posiciones. Por último la instrucción Print muestra el mensaje en dicha posición.
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
ScaleMode = 3
CurrentX = CInt(Rnd * 500)
CurrentY = CInt(Rnd * 500)
Circle (CurrentX, CurrentY), Rnd * 50
Print "hola"
End Sub

Image35.gif (1607 bytes)

En el siguiente programa vas a dibujar sobre un fondo con una imagen. Para ello crea un nuevo proyecto e inserta en el formulario un PictureBox.
Inserta en la propiedad Picture el fichero DINO.GIF
Esta imagen será el fondo del PictureBox y no podrá borrarse con el método Cls. Inserta dos botones de acción y asigna a su propiedad Click el código siguiente.

Image37.gif (5200 bytes)

Su funcionamiento es el siguiente:
El primer botón borra cualquier gráfico que haya en el PictureBox (excepto la imagen de fondo) con Cls y dibuja una elipse con grosor 2 en las coordenadas (twips) 1000,300 y radio 500. Después coloca el cursor gráfico en las coordenadas 800,200 para escribir el mensaje.
El segundo botón hace lo mismo pero modificando la elipse y el mensaje.
Image36.gif (4239 bytes)
Image34.gif (8110 bytes) Private Sub Command1_Click()
Picture1.DrawWidth = 2
Picture1.Cls
Picture1.Circle (1000, 300), 500, QBColor(4), , , 0.5
Picture1.CurrentX = 800
Picture1.CurrentY = 200
Picture1.Print "hola"
End Sub

Private Sub Command2_Click()
Picture1.DrawWidth = 2
Picture1.Cls
Picture1.Circle (1000, 300), 600, QBColor(4), , , 0.5
Picture1.CurrentX = 400
Picture1.CurrentY = 200
Picture1.Print "¿que tal estás?"
End Sub
Para comprobar como el borrado de los objetos gráficos no afecta al fondo del control de imagen, selecciona el pictureBox y añade al procedimiento MouseMove el código de la derecha. Este procedimiento se ejecuta cada vez que el ratón se mueve sobre la imagen y le pasa las coordenadas X e Y de su posición. El procedimiento las utiliza para situar el centro de la elipse y el texto del mensaje. Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Picture1.DrawWidth = 2
Picture1.Cls
Picture1.Circle (X + 500, Y), 600, QBColor(4), , , 0.5
Picture1.CurrentX = X - 50
Picture1.CurrentY = Y - 50
Picture1.Print "¿que tal estás?"
End Sub

Image38.gif (16756 bytes)

Este código añadido al procedimiento Click del formulario te mostrará círculos concéntricos de distintos colores cada vez que hagas click con el ratón:
Private Sub Form_Click()
Dim CX, CY, Radio ' Declara la variable.
ScaleMode = 3 ' Establece la escala a píxeles.
DrawWidth = 5
CX = ScaleWidth / 2 ' Establece la posición X.
CY = ScaleHeight / 2 ' Establece la posición Y.
If CX > CY Then Limit = CY Else Limit = CX
For Radio = 0 To Limit ' Establece el radio.
Circle (CX, CY), Radio, RGB(Rnd * 255, Rnd * 255, Rnd * 255)
Next Radio
End Sub
 

volvera.gif (6294 bytes)