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!
Mira, si esto es lo que andas buscando:
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:
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 !
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!
Cuadra las coordenadas:
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!
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
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:
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
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!
se dibuja en el evento paint del formulario...
y se dibuja todo todito todo
evento_paint
clear
dibujamos
end event
Y Bueno, si no queres crear el componente en tiempo de diseño, podes crearlo en tiempo de ejecución con esto:
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 ;)
Hola HaDeS y ¡gracias por todo!, eso ultimo era justamente lo que estaba bucando.
Xaina... ¡Saludos! :-*