FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
como arrastro un objeto en delphi?
hola alguien sabe como arrastro un objeto mediante eventos del raton en delphi, por ejemplo, supongamos que hice un circulo con el algoritmo de bresenham, entonces quiero arrastrarlo a una determinada parte del canvas se puede hacer eso?
ATENCION no me sirve si el codigo arrastra imagenes, nesecito que arrastre objetos si me pueden ayudar se los agradeceria saludos. |
#2
|
|||
|
|||
hola, yo lo hago asi:
Con estos 3 procedures, solo te falta adaptarlos a tus necesidades.
Tienes que ponerlos en esos eventos:
|
#3
|
||||
|
||||
Cita:
¿Has hecho un circulo? ¿como? ¿usando un TImage o pintando sobre un canvas? ¿qué canvas (Form, Timage, tdbgrid)? ¿mover objetos? Perdona, un objeto (TObject) no es un control visual, es abstracto, no puede moverse con el ratón. Saludos.
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#4
|
||||
|
||||
Cita:
para los eventos de delphi creo que el amigo del nombre innombrable te ha dado una muy buena pista. ahora para lo que quieres hacer del circulo espero que pueda ayudarte: al realizar el circulo mediante un algoritmo, tienes que generar una estructura que guarde algunos datos del circulo creado, tales como el centro, el diametro, etc, digase los valores que te permiten crear el circulo con el algoritmo. una vez que tienes esos valores en una estructura, en el evento mousedown debes checar primero la posicion del raton, verificar si en esa posicion alguno de los valores del circulo y del raton se intersectan, es decir, si la coordenada del raton se encuentra dentro del area del circulo, aqui debes hacer los calculos pertinentes con los valores que guardaste en la estructura. si la interseccion de los valores es verdadera debes comenzar el arrastre, borrando el anterior circulo y volviendolo a dibujar en la nueva posicion del raton mientras se mueve, esto es en mousemove si quieres dar la impresion de movimiento, si no, simplemente en el evento mouseup borras el anterior y vuelves a dibujar el nuevo circulo con las nuevas coordenadas. en si ya comenzamos a plantear la logica, solo resta pasarlo al codigo, ¿fácil? no lo creo pero tampoco imposible
__________________
inutilerias.blogspot.com |
#5
|
|||
|
|||
eso es exactamente lo que quiero hacer nightynvid, pero lo dificil esta en implementar un procedure que se encargue de ver si se intersectan o no los valores del circulo y del raton, y supongamos que ya tengo ese procedure y si se intersectan , como dice lepe, un objeto es abstracto y no puede moverse, pero me imagino que se puede llamar a un procedure que hice llamado traslacion, y que obviamente traslada ese circulo dandole la coordenada respectiva, se debe meter ese procedure en el evento mousemove me imagino o estoy mal, y el evento mouse down es el que calcula la coordenada del raton inicial, y el mouse up la coordenada donde se va a trasladar el circulo, o de plano estoy perdido, y todo esta mal
por cierto, si pinte el circulo en un canvas Timage |
#6
|
||||
|
||||
Puedes usar los 3 eventos MouseDown, MouseMouve y MouseUp, todo depende de la lógica que quieras usar. Como lo has planteado es lo normal.
Para hallar intersección, Delphi tiene: - ptInRect Dado un cuadrado (TRect) y un punto, devuelve True si el punto está en el cuadrado - ptInRegion, es algo más compleja de usar, pero valdría para saber si un punto está inscrito en cualquier polígono pintado a mano alzada, (quizás el método para ver si un circulo intersecta con el cuadrado). Primero debes usar CreateRgn para crear el círculo. Mira en la ayuda de delphi. Lo que no queda claro es la lógica del programa, una forma es esta: Uso una variable Global del form llamada IsMouseDown:Boolean, en el MouseDown del Timage la pongo a True, en el MouseUp del Timage la pongo a false. (esto me permite saber en el evento MouseMove si el usuario tiene presionado el ratón mientras mueve el ratón por el TImage). - Mantengo pulsado el ratón en el canvas, llamo a una función llamada Intersecta que devuelve True si el punto donde he bajado el ratón interfiere con otros ya pintados: Por último en el evento OnMouseUp verifico que el botón estaba presionado y que se puede pintar sin colisiones, en este punto dibujo el círculo y pongo la variable IsMouseDown a false. ¿te sirve? Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#7
|
|||
|
|||
lo voy a intentar gracias
|
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
como acceder a un objeto si el nombre es pasado como un string | marcelinux | Varios | 4 | 08-11-2007 00:20:39 |
Como obtener las variables de un objeto | TEO127 | OOP | 17 | 08-06-2007 12:43:05 |
Como crear un objeto en Delphi ? | Delphiboy | OOP | 3 | 31-01-2006 20:39:15 |
Como guardar un objeto en un archivo ? | cmurua71 | OOP | 7 | 18-11-2005 21:26:30 |
como ordena delphi los fields de un objeto | oworty | OOP | 3 | 27-01-2005 15:47:53 |
|