Este tema está destinado al aprendizaje del manejos de graficos en visual basic. para ello emplearemos el objeto picturebox, que es tremenda herramienta para lograr buenos efectos.
siempre he querido meterle mano a este tópico, porque la visualización de datos se usa mucho en proyectos y para no quedarnos cortos en esta materia vamos ir analizando paso a paso, lo básico para crear un dibujo estático y dinámico, hasta donde se pueda llegar y hasta donde nos puedan ayudar

).
Cualquiera que tenga conocimiento sobre este tema le invito a que participe y nos dé su aporte.
ya hemos visto varios codigos en este subforo dedicado a ver los datos de entrada en forma de señales. gracias a los aportes de varios foreros y al amigo Bruno en especial que es un verdugo en esto de trabajar con el picture box

primero vamos a estudiar el método
Linesi buscamos en el MSDN, nos sale:
objeto.Line [Step] (x1, y1) [Step] - (x2, y2), [color], [B][F]
en este
post aparece la explicación completa de cada uno de los argumentos
para nuestro propósito podemos resumir el método así
picturebox.Line (x1, y1) - (x2, y2), [color]
la clave de todo esto es aplicar un poco de geometría analítica e imaginación, es decir, jugar con las coordenadas x(1,2) e y(1,2) para lograr el efecto deseado.
vamos a montar un primer ejemplo, dibujar una línea recta.
la base para dibujar una línea, es tener las coordenadas de 2 puntos (que serian los extremos de la recta).
Option Explicit
Private Sub Command1_Click()
Picture1.Line (0, 0)-(10, 15)
End Sub
- cabe decir que para dibujar una línea recta hay que establecer ciertas propiedades al picturebox
por ejemplo, podemos colocar ScaleMode = Pixel (para ajustar a la resolución del monitor) y drawwidth = 5 (el ancho de la recta). hay otros que se iran develando.
una imagen:

allí vemos que el origen comienza desde la parte superior derecha. hay otra cosa curiosa, prueben alternando otra ventana (ocultando) y vuelvan otra vez, -¿que ven?- se borró la línea dibujada -¿porqué?- porque la propiedad autoredraw = false, esto significa que el picturebox no depende mantener el gráfico dibujado, si queremos mantenerlo -> autoredraw = true
vamos a cambiarle las coordenadas:
Picture1.Line (0, 0)-(1000, 15000)

se observa que la línea se pierde por debajo del objeto, ¿y como podemos hacer para que no suceda esto?
siempre hay que tomar en cuenta las dimensiones del picturebox, para hacer los ajuste de lo que vayamos a dibujar y que queden dentro, estas lineas dependerá del alto, y ancho, con las propiedades scaleheight y scalewidth respectivamente.
aquí podemos escribir varias ecuaciones la mas común: restar al alto la variable y2 y el ancho la variable x2.ej:
Dim cx As Integer, cy As Integer
Private Sub Command1_Click()
Picture1.Line (0, 0)-(cx - 150, cy - 100)
End Sub
Private Sub Form_Load()
cy = Picture1.ScaleHeight
cx = Picture1.ScaleWidth
End Sub
si hacemos x2 = Picture1.ScaleWidth - 1000 e y2 = ScaleHeight estaremos calibrando las coordenadas para que siempre se mantengan ajustados dentro de la caja, pero siempre que estos sean de valor positivo.
para dibujar una recta de extremo a extremo, basta con hacer:
Dim cx As Integer, cy As Integer
Private Sub Command1_Click()
Picture1.Line (0, 0)-(cx, cy)
' dibuja una recta en los extremos de la caja
End Sub
Private Sub Form_Load()
cy = Picture1.ScaleHeight
cx = Picture1.ScaleWidth
End Sub

esto sería lo máximo visible para nuestro ejemplo1 y sería un dibujo estático, y ¿como es uno dinámico?
pues, dibujando la recta en tiempo de ejecución:
Dim cx As Integer, cy As Integer
Dim i As Integer, j As Integer
Private Sub Command1_Click()
Timer1.Enabled = True
End Sub
Private Sub Form_Load()
cy = Picture1.ScaleHeight ' 117
cx = Picture1.ScaleWidth ' 253
Timer1.Interval = 10
Timer1.Enabled = False
End Sub
Private Sub Timer1_Timer()
If Not i = cx Then ' pregunta si i no ha llegado a cx
Picture1.Line (0, 0)-(i, i * (117 / 253))
i = i + 1 ' incrementa i
Else
Timer1.Enabled = False ' ya llego, deja de dibujar
End If
End Sub
aquí se usó un control timer para poder observarlo lentamente como se vá dibujando la recta. vean que la recta es en función de el ancho de la caja, o sea, ScaleHeight = f(ScaleWidth) en el tiempo.
la línea de programación crítica es:
Picture1.Line (0, 0)-(i, i * (117 / 253))

¿y de donde salió que y2 = i * (117 / 253)?
como en este picturebox se conocen las coordenadas de las esquinas, podemos trasladar nuestra recta al plano cartesiano. ¿cuál es la ecuación de una recta?
Y = (y2-y1)/x2-x1) * X
donde el cociente de las constantes viene siendo la pendiente, en nuestro ejemplo:
Y = (117-0)/(253-0) * X
que es precisamente Y = y2. ven como si se puede hallar una expresión matemática que se pueda aplicar a nuestro dibujo.
y a medida que el dibujo tenga más cosas, el cálculo se irá haciendo más complejo.
Salu2
Pedro