Método Line :
Con este método podemos dibujar Líneas y rectángulos en un objeto donde se permita utilizar dicho método, como por ejemplo en los Formularios, los controles PictureBox, el objeto Printer.
Los parámetros de Line son:
El_Objeto.Line (X1, Y1) - ( X2, Y2), El_Color, BF
Donde El_Objeto es donde vamos a dibujar.
Los primeros dos parámetros son las coordenadas para X e Y, luego el color de la línea y por último el parámetro BF al igual que el color, es un parámetro de tipo opcional, y aquí podemos pasar como valor: B o BF o ningún valor
Si pasamos B, se dibujará un rectángulo sin relleno. Si pasamos BF el rectángulo tendrá de relleno el color especificado en el parámetro Color. Si no pasamos nada se dibuja una línea
Ejemplos:
Lo siguiente dibuja una línea de color Azul en el formulario:
Me.ScaleMode = vbPixels
Me.Line (10, 10)-(100, 100), vbBlue
Como se ve en el ejemplo anterior, los valores que tomará y utilizará LINE para las coordenadas X e Y, serán los establecidos en el ScaleMode del Objeto donde dibujar, en este caso se colocó en Pixeles ( vbPixels )
Este otro dibuja una línea horizontal y otra vertical a lo ancho y alto del Formulario, al mover el puntero del mouse. A la primer línea se le aplica el color verde, a la la línea horizontal el color Rojo, utilizando las constantes de color de vb. ( VbgGreen y VbRed )
Option Explicit
Private Sub Form_MouseMove(Button As Integer, _
Shift As Integer, _
X As Single, _
Y As Single)
' Limpia el Form
Cls
'Dibuja la línea vertical
Line (X, ScaleTop)-(X, ScaleHeight), vbGreen
'Dibuja la línea Horizontal
Line (Me.ScaleLeft, Y)-(Me.ScaleWidth, Y), vbRed
End Sub
En este otro ejemplo, se dibuja en el formulario, una cantidad x de lineas con colores aleatorios, utilizando la función Rnd de visual basic para generar el color aleatorio y para la cantidad de lineas :
colocar un control timer
Código fuente en el formulario
Option Explicit
Private Sub Form_Load()
Form1.BackColor = vbBlack
Form1.ScaleHeight = 100
Form1.ScaleWidth = 100
Timer1.Interval = 500
End Sub
Private Sub Timer1_Timer()
Dim x As Long
Dim x1 As Long, x2 As Long
Dim y1 As Long, y2 As Long
Dim Color As Long
' si el form está minimizado sale
If Form1.WindowState = vbMinimized Then
Exit Sub
End If
' limpia el formulario
Me.Cls
' Int(Rnd * 50) + 1, es la cantidad de lineas
For x = 0 To Int(Rnd * 50) + 1
DoEvents
' valores x e y para la linea actual
x1 = Int(Rnd * 101)
x2 = Int(Rnd * 101)
y1 = Int(Rnd * 101)
y2 = Int(Rnd * 101)
' color aleatorio de 1 a 15 que luego se usa con Qbcolor
Color = Int(Rnd * 15)
' dibuja la linea
Form1.Line (x1, y1)-(x2, y2), QBColor(Color)
Form1.Line (x1, y2)-(x2, y1), QBColor(Color)
Form1.Line (x2, y1)-(x1, y2), QBColor(Color)
Form1.Line (y1, y2)-(x1, x2), QBColor(Color)
Next x
End Sub
Este código dibuja lineas, como si fuese un lapiz, es deicir al mantener presionado el mouse en el formulario:
Option Explicit
Dim Flag As Boolean
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
'Establece el CurrentX y el CurrentY
CurrentX = X
CurrentY = Y
Flag = True
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
If Flag = False Then
Exit Sub
End If
'Dibuja la linea
Line -(X, Y)
End Sub
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
Flag = False
End Sub
Lo siguiente dibuja un rectángulo sin relleno de color Rojo, pasándole la B como parámetro al método Line
Me.ScaleMode = vbPixels
Me.Line (10, 10)-(100, 100), vbRed, B
Ahora, en ves de especificar B, se indica el valor BF para rellenar el rectángulo :
Me.ScaleMode = vbPixels
Me.Line (10, 10)-(100, 100), vbRed, BF
Cuando se dibujan rectángulos, es decir se utiliza B o BF, X1 , Y1, X2 e Y2 sería equivalente a :
El_Objeto.Line (Izquierda, Arriba) - (Ancho, Alto).
El siguiente ejemplo dibuja una línea vertical de color verde una al lado de la otra en todo el ancho del formulario, en un bucle:
Private Sub Form_Paint()
Me.ScaleMode = vbPixels
For i = 0 To Me.ScaleWidth Step 10
Line (i, 10)-(i, Me.ScaleHeight - 10), vbGreen
Next
End Sub
Propiedad CurrentX y CurrentY
CurrentX devuelve o establece las coordenadas horizontales para el siguiente método de dibujo. CurrentY devuelve o establece las coordenadas verticales para el siguiente método de dibujo, en este caso para el método Line.
Lo siguiente, dibuja al presionar un Command1, un rectángulo de 25 pixeles de ancho por 50 pixeles de alto. Y la posición izquierda y la posición superior (x1 e y1), es decir el CurrentX y el CurrentY, se puede ver como no cambian su valor, y se mantienen igual. Es decir, la primera ves que se presiona para dibujar el primer rectángulo, Currentx y Currenty valen 0. Luego la segunda ves, Currentx tiene el valor 25 y Currenty el valor 50. si se sigue presionando el Command1, mientras no se cambie explicitamente el valor , currentx y Currenty mantendrán dichos valores, x2 e y2.
Private Sub Command1_Click()
Me.Line (CurrentX, CurrentY)-(25, 50), vbRed, B
MsgBox "Pos x: " & CurrentX
MsgBox "Pos y: " & CurrentY
End Sub
Private Sub Form_Load()
Me.ScaleMode = vbPixels
End Sub
Siguiendo el ejemplo anterior, si quisieramos que las coordenadas x2 e y2 sean relativas a x1 e y1, podemos utilizar la palabra reservada Step.
Este código es exactamente igual al anterior, con la diferencia de que se utiliza Step para especificar el Currentx y el Currenty para que x2 e y2 sea relativo a x1 e y1, el resultado sería esto:
Este es igual al anterior pero la posición Superior (y1) es fija, y lo que se desplaza es la posición horizontal, es decir el CurrentX, y cada ves que se presione el Command1 , el Currentx (la posición izq ) se incrementará de 25 en 25 pixeles.
Private Sub Command1_Click()
Me.Line (CurrentX, 20)-Step(25, 50), vbRed, B
End Sub
Private Sub Form_Load()
Me.ScaleMode = vbPixels
End Sub
También se podría haber hecho lo mismo sin utilizar Step:
Private Sub Command1_Click()
Me.Line (CurrentX, 0)-(CurrentX + 25, 50), vbRed, B
End Sub
Private Sub Form_Load()
ScaleMode = vbPixels
End Sub
Este otro ejemplo, dibuja un cuadrado uno al lado del otro , a lo ancho del formulario, el rectángulo es de 10 pixeles de ancho por 10 pixeles de alto, y cada cuadrado está separado por 5 pixeles ente uno y otro.
Private Sub Form_Load()
Dim Izquierda As Single
Me.ScaleMode = vbPixels
Me.AutoRedraw = True
For Izquierda = 0 To Me.ScaleWidth Step 15
Me.Line (Izquierda, 10)-Step(10, 10), vbBlue, B
Next
End Sub
Este otro dibuja rectángulos de 25 x 25 pixeles uno al lado del otro, en todo el formulario mediante dos bucles For. El primer bucle es para los rectángulos horizontales y el otro para los verticales.
Private Sub Command1_Click()
Me.Cls
For Horizontal = 0 To ScaleWidth Step 30
For vertical = 0 To ScaleHeight Step 30
Line (Horizontal, vertical)-Step(25, 25), &H808080, B
Next
Next
End Sub
Private Sub Form_Load()
Me.ScaleMode = vbPixels
End Sub
Dibujar cuadrícula
Lo siguiente dibuja una cuadríacula mediante el método Line en el objeto indicado, puede ser un picturebox o formulario, indicando la cantidad de cuadros para la forma horizontal y la cantidad para el vertical.
Código fuente en el formulario
Option Explicit
Sub Dibujar_cuadricula( _
Objeto As Object, _
CountX As Single, _
CountY As Single, _
Optional x_Color As Long = vbBlack, _
Optional y_Color As Long = vbBlack)
Dim i As Integer
Dim mx As Long
Dim my As Long
' limpiar objeto
Objeto.Cls
mx = CLng(Objeto.ScaleWidth / CountX)
my = CLng(Objeto.ScaleHeight / CountY)
' cambiar color del lápiz
Objeto.ForeColor = x_Color
' dibujar las líneas verticales de la cuadricula
For i = 0 To CountX
Objeto.Line (i * mx, 0)-(i * mx, Objeto.ScaleHeight)
Next i
Objeto.ForeColor = y_Color
' dibujar las líneas horizontales de la cuadricula
For i = 0 To CountY
Objeto.Line (0, i * my)-(Objeto.ScaleWidth, i * my)
Next i
End Sub
Private Sub Form_Load()
With Me
.BackColor = vbWhite
.ForeColor = vbBlue
.FontSize = 12
.AutoRedraw = True
End With
Call Dibujar_cuadricula(Me, 25, 25, vbBlue, vbRed)
'Call Dibujar_cuadricula(Me, 5, 10, vbBlue, vbRed)
'Call Dibujar_cuadricula(Me, 25, 50, vbBlue, vbRed)
End Sub
Propiedad DrawWidth
Para establecer el grosor de la línea de dibujo se utiliza la propiedad DrawWidth.
Este ejemplo dibuja líneas una al lado de la otra, separadas por 20 pixeles, mediante un bucle y va incrementando el DrawWidth en 1 en cada pasada. El dibujo se realiza en un control PictureBox llamado Picture1
Private Sub Command1_Click()
Picture1.Cls
Picture1.ScaleMode = vbPixels
For i = 0 To ScaleWidth Step 25
Picture1.Line (i, 10)-(i, Picture1.ScaleHeight - 10), vbGreen
Picture1.DrawWidth = Picture1.DrawWidth + 1
Next
Picture1.DrawWidth = 1
End Sub
Este otro ejemplo dibuja un borde y un degradado en un formulario utilizando el método Line, como muestra la siguiente captura:
Para crear le ejemlo colocar la propiedad BorderStyle del formulario en 0 - None, y pegar el siguiente código:
Private Sub Form_Load()
With Me
'Algunas propiedades del formulario
.AutoRedraw = True
.ScaleMode = 3
.FontSize = 16
.ForeColor = &HC0FFFF
End With
End Sub
Private Sub Form_Resize()
'Esto dibuja el degradado al formulario
Degradado Me
'Esto dibuja el borde al formulario
Call Dibujar_Borde
End Sub
Sub Dibujar_Borde()
Me.DrawStyle = 0
Me.DrawWidth = 10
Line (0, 0)-(ScaleWidth - 1, ScaleHeight - 1), &HFFC0C0, B
End Sub
Sub Degradado(vForm As Form)
Dim intContador As Integer
vForm.DrawStyle = vbInsideSolid
vForm.DrawWidth = 2
'vForm.ScaleHeight = 256
For intContador = 0 To 255
vForm.Line (0, intContador)-(Screen.Width, _
intContador - 1), _
RGB(0, 0, 255 - intContador), B
Next
Me.CurrentX = 20
Me.CurrentY = 20
Me.Print " Ejemplo para dibujar un borde a un formulario "
End Sub
2 - Método Circle
El método Circle permite dibujar un círculo, una elipse o un arco sobre un objeto.
La sintaxis del método es la siguiente:
EL_Objeto.Circle (Step As Integer, X As Single, Y As Single, Radius As Single, Color As Long, Start As Single, End As Single, Aspect As Single)
Los valores para X e Y especifican el punto donde estará el centro del círculo a dibujar.
Radius es el valor del radio del mismo. El parámetro es obligatorio.
Color: Valor que indica el color que tendrá el círculo o elipse para su contorno. Se puede pasar cualquier valor admitido en visual basic, por ejemplo un Long, un valor Rgb etc..
Los parámetros Start y End son opcionales , y se utilizan para dibujar parte de una elipse o círculo
Por último el parámetro Aspect, se utiliza para definir el aspecto del círculo. Este valor es opcional. Ver ejemplos mas abajo.
El siguiente ejemplo crea un círculo en el centro de un control PictureBox, con un radio de 50 pixeles.
Private Sub Command1_Click()
Picture1.Cls
With Picture1
Picture1.Circle (.ScaleWidth / 2, .ScaleHeight / 2), _
50, _
vbBlue
End With
End Sub
Private Sub Form_Load()
Picture1.ScaleMode = vbPixels
End Sub
Este ejemplo dibuja un círculo con un radio aleatorio entre 10 y 100 pixeles, al hacer click en el formulario, es decir el centro del círculo ( x1 e y1 ), son los valores x e y del evento MouseDown del Form:
Private Sub Form_Load()
ScaleMode = vbPixels
Me.DrawWidth = 2
End Sub
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
Circle (X, Y), Int((100 - 10 + 1) * Rnd + 10), vbRed
End Sub
Rellenar las circunferencias
Para esto se utiliza las propiedades FillColor y FillStyle. FillColor es el color de relleno, para FillStyle ver las opciones de estilos para los rellenos: 0 - Sólido, 1 - transparente, 2 - Línea Horizontal, 3 - Línea Vertical etc..
Un ejemplo: este es igual al anterior, pero rellena el círculo de un color aleatorio, siempre y cuando la propiedad FillStyle no sea transparente:
Colocar un Command1 y un Combo1 en el formulario:
Private Sub Combo1_Click()
Me.FillStyle = Combo1.ListIndex
End Sub
Private Sub Command1_Click()
Me.Cls
End Sub
Private Sub Form_Load()
ScaleMode = vbPixels
'Grosor de la línea
Me.DrawWidth = 2
'Opciones de estilo de relleno
With Combo1
.AddItem " 0 - Solido "
.AddItem " 1 - Transparente "
.AddItem " 2 - Linea Horizontal "
.AddItem " 3 - Linea Vertical "
.AddItem " 4 - Diagonal Arriba "
.AddItem " 5 - Diagonal Abajo "
.AddItem " 6 - Cross "
.AddItem " 7 - Diagonal Cross "
End With
Command1.Caption = "Limpiar"
End Sub
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
'color de relleno aleatorio
Me.FillColor = RGB(Int(255 * Rnd), Int(255 * Rnd), Int(255 * Rnd))
'Dibuja el círculo
Circle (X, Y), Int((50 - 10 + 1) * Rnd + 10), _
RGB(Int(255 * Rnd), Int(255 * Rnd), Int(255 * Rnd))
End Sub
Dibujar Elipses
Para dibujar Elipses se debe especificar en el parámetro Aspecto los siguientes valores. Por ejemplo si pasamos un 1, el círculo será una circunferencia perfecta, si pasamos 0.5 , el radio horizontal del mismo será el doble que el radio vertical, si pasamos un 2 lo contrario.
Para el ejemplo del gráfico, colocar un Combo1 y este código en el Form:
Private Sub Form_Load()
ScaleMode = vbPixels
'Grosor de la linea
Me.DrawWidth = 2
For i = 0.1 To 2.1 Step 0.1
Combo1.AddItem i
Next
Combo1 = Combo1.List(0)
End Sub
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
Circle (X, Y), Int((50 - 10 + 1) * Rnd + 10), _
RGB(Int(255 * Rnd), Int(255 * Rnd), Int(255 * Rnd)), , , CSng(Combo1)
End Sub
3 - Método Point y método Pset :
El método Point lo que hace es devolver , como un número entero ( un Long ), el color RGB del punto que se le especifique, puede ser utilizado tanto en un Formulario como en un PictureBox.
El método Pset establece un color determinado para un punto de un objeto.
El siguiente ejemplo utiliza los dos métodos.
Cargar un gráfico en un Picture1 y también colocar un Picture2. Al hacer click en el Picture1, en el evento MouseDown, se obtendrá el color de ese pixel, y ese valor se le aplicará al BackColor del Picture2, como se ve en el gráfico, el punto verde es el establecido con el método Pset.
Private Sub Form_Load()
'Modo de escala en pixeles
Picture2.ScaleMode = vbPixels
Picture1.ScaleMode = vbPixels
'Grosor del punto
Picture1.DrawWidth = 3
End Sub
Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
Picture1.Cls
' Establece el color del Picture2 mediante el método Point
Picture2.BackColor = Picture1.Point(X, Y)
' Dibuja el punto
Picture1.PSet (X, Y), vbGreen
'Valor Hexadecimal del color
Me.Caption = "Valor del color: " & Hex(Picture2.BackColor)
End Sub
Nota: la forma y variaciones en las que se dibuja el punto u otras figuras mediante los métodos gráficos, dependen de las propiedades DrawStyle y DrawMode del objeto.
Este es otro ejemplo que utiliza Pset para dibujar un punto al presionar en el formulario, tomando como valores el x e y del evento MouseDown del Form, luego se dibuja una línea desde un punto hacia el otro punto mediante el método Line
Código fuente
Dim X1 As Single
Dim Y1 As Single
Private Sub Form_Load()
AutoRedraw = True
End Sub
Private Sub Form_MouseDown(Button As Integer, _
Shift As Integer, _
X As Single, _
Y As Single)
DrawWidth = 10
'Dibuja el punto con Pset pasandole el x e y donde se hizo click
PSet (X, Y), vbBlack
If X1 <> 0 And Y1 <> 0 Then
DrawWidth = 3
'Dibuja la linea
Line (X1, Y1)-(X, Y), vbWhite
End If
X1 = X
Y1 = Y
End Sub
Este otro ejemplo dibuja puntos en el formulario en forma aleatoria
Colocarle al formulario la propiedad WindowState en Maximized y tambie´n agregar un control CommandButton
Código fuente en el formulario
Dim Tiempo As Long
Private Sub Command1_Click()
' dibuja los puntos en el formulario
Call Dibujar_Puntos(vbBlue)
' dibuja los puntos en el formulario
Call Dibujar_Puntos(vbButtonFace)
End
End Sub
Function Dibujar_Puntos(Color As Long)
Dim Posicion_X
Dim Posicion_Y
Tiempo = Timer + 5
While Tiempo >= Timer
' valores para la posición x e y
Posicion_X = Rnd * ScaleWidth
Posicion_Y = Rnd * ScaleHeight
' Dibuja el punto en la coordenada y con el color indicado con Pset
PSet (Posicion_X, Posicion_Y), Color
DoEvents
Wend
End Function
Private Sub Form_Load()
' modo de escala en pixeles y grosor del lapiz para el formulario
ScaleMode = 5
DrawWidth = 10
End Sub
4 - Función QBColor:
Definición de la función QBColor de Visual basic:
Esta función devuelve el código de color RGB de un número de color especificado de una lista de colores estándar predefinidos
Es decir, esta función tiene como parámetro, un número entre el 0 y 15, es decir 16 valores posibles para retornar un color especifico.
El siguiente ejemplo, muestra el uso de esta función. Lo que hace es recorer en un bucle, desde el 0 hasta el 15, y le cambia el BackColor a un arreglo de controles Label.
Colocar una matriz de Label1. Label1 (0), Label1(1) .... hasta el Label1(15)
Private Sub Form_Load()
Me.Caption = " Ejemlpo de la función QBColor"
Dim i As Integer
For i = 0 To 15
' Asigna el color devuelto por la función QBColor _ al color de fondo del Label
Label1(i).BackColor = QBColor(i)
' Asigna el caption
Label1(i).Caption = " Valor de QBColor: >> " & i
Next i
End Sub
Al ejecutar el formulario se verá algo por el estilo:
Nota: cualquier valor que no esté entre el 0 y el 15, producirá error.