Dibujar Linea

Iniciado por Xaina, 30 Octubre 2007, 03:22 AM

0 Miembros y 2 Visitantes están viendo este tema.

Xaina

   Hola chic@s, para dibujar una linea diagonal, yo hago algo como esto:

Private Sub CmdDibujarLinea_Click()
    Me.ScaleMode = vbPixels
    Me.Line (10, 10)-(100, 100), vbBlue
End Sub


   Todo bien hasta aqui, el problema es que yo requiero mover esa linea un poco mas arriba en tiempo de ejecución y ese movimiento debe ser divisado lentamente.

   Logre conseguir que una linea se moviera, usando el 'objeto Line' y un timer, pero no me sirve asi, xq ¿qué pasaria despues con la linea que fue dibujada en tiempo de jecución usando el método Line?

   ¿Es posible dibujar una linea, usando solo el 'Objeto Line' en tiempo de ejecución y descartando totalmente al método Line?

   Agradeceria sus respuestas.

   Xaina... ¡Saludos!

HaDeS, -

#1
Mira, si esto es lo que andas buscando:
Código (vb) [Seleccionar]

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 'Hace un pause de N milisegundos
Private Sub CmdDibujarLinea_Click()
Me.ScaleMode = vbPixels
Me.Line (10, 10)-(100, 100), vbBlue
For i = 100 To 10 Step -1
    Sleep 100
    DoEvents
    Me.Cls 'Sirve para borrar lo que se haya impreso en el formulario :)
    Me.Line (10, 10)-(100, i), vbBlue
Next i
End Sub


Bueno, saludos :)

Editado: Y bueno, ya que ando de buen humor, jaja mirate este código, genera un muy bonito efecto:
Código (vb) [Seleccionar]

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Dim Parar As Boolean

Private Sub CmdDibujarLinea_Click()
Me.ScaleMode = vbPixels
Parar = False
DeNuevo:
Me.Line (10, 10)-(100, 100), vbBlue
For i = 100 To 10 Step -1
    Sleep 5
    DoEvents
    Me.Cls
    Me.Line (10, 10)-(100, i), vbBlue
Next i
For i = 10 To 100
    Sleep 2
    DoEvents
    Me.Cls
    Me.Line (10, 10)-(100, i), vbBlue
Next i
If Parar = False Then
    GoTo DeNuevo
End If
End Sub

Private Sub CmdParar_Click()
Parar = True
End Sub

jaja saludos !

Xaina

#2
   Hola HaDeS, esta bien el code, pero la linea debe ser siempre diagonal, nunca puede cambiar su forma, mas si su posición.

   Ese 'Me.cls' uhm...  :¬¬ no termina de cuadrarme ¿qué pasaria si tengo dos lineas más dibujadas (en total 3) y no quiero que se borren estas últimas 2? 

   Xaina... ¡Saludos!

HaDeS, -

Cuadra las coordenadas:
Código (vb) [Seleccionar]

    Me.Cls
    Me.Line (10, i - 90)-(100, i), vbBlue

El Cls solo sirve para limpiar el form, quitalo... ¿Que pasará? :P.
y si no queres que se te borren esas dos últimas lineas pués no pongas el Me.cls (Respuesta a la pregunta anterior)
Bueno, jaja estoy algo confuso. no sé que queres decir con eso de las dos últimas lineas.

Saludos!

Xaina

   Bueno... eso de quitar el cls, en este, caso no es buena idea...

   Solo imaginate: como cuando se grafica una función a fin, con tres puntos (P1, P2 y p3), dibujamos en el cuadrante positivo, tres lineas (con los puntos antes mencionados)
y se desea que la linea 1 se mueva diagonalmente hacia arriba, sin perder su forma y sin que las otras 2 lineas que fueron dibujadas, se borren.

   No se, si me entiendes...

   Xaina

 

HaDeS, -

#5
Lo que pasa con "Me.Line" es que es una impresión en el form, es como si vos cogieras un lápiz y rayaras algunas líneas, y luego utilizas el borrador "Me.Cls" para borrar aquellas líneas. Lo que se puede hacer en este caso es coger un lapicero "Componente Line", e hicieras el trazo con este lapicero, así el borrador no serviría para borrar aquella línea.
Si no queres utilizar este lapicero, podes al final de cada For, trazar la línea con el lápiz xD
Bueno, no sé si me hice entender jaja, acá esta el code:
Código (vb) [Seleccionar]

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 'Hace un pause de N milisegundos
Private Sub CmdDibujarLinea_Click()
Me.ScaleMode = vbPixels
Me.Line (10, 10)-(100, 100), vbBlue
For i = 100 To 10 Step -1
    Sleep 10
    DoEvents
    Me.Cls 'Sirve para borrar lo que se haya impreso en el formulario :)
    Me.Line (10, i - 90)-(100, i), vbBlue
Next i
Me.Line (10, 100)-(10, 10), vbBlack
End Sub

Yo ya tengo sueño :P, seguramente para mañana te contestan bien, Saludos!

Editado: Como ando aprendiendo a tildar, entonces corregí. xD

Xaina

#6
   Mandando a dibujar la linea negra, dentro del for esta bien, la borra, pero la vuelve a dibujar y es como si no la hubiera desaparecido.

  La siguiente pregunta respondela cuando puedas, yo tambien me voy a dormir.

  ¿Es posible dibujar una linea en tiempo de ejecución usando el componente Line?

  Xaina... ¡Saludos!

Hans el Topo

se dibuja en el evento paint del formulario...

y se dibuja todo todito todo

evento_paint
    clear
   
    dibujamos
end event
 

HaDeS, -

Y Bueno, si no queres crear el componente en tiempo de diseño, podes crearlo en tiempo de ejecución con esto:
Código (vb) [Seleccionar]

Dim WithEvents Linea As Line
Private Sub Form_Load()
Set Linea = Form1.Controls.Add("VB.Line", "Linea1")
Me.ScaleMode = vbPixels
Linea.Visible = True
Linea.X1 = 10
Linea.X2 = 100
Linea.Y1 = 20
Linea.Y2 = 20
End Sub


Saludos ;)

Xaina

   Hola HaDeS y ¡gracias por todo!, eso ultimo era justamente lo que estaba bucando. 

   Xaina... ¡Saludos!  :-*