Ver Mensaje Individual
  #6  
Antiguo 04-12-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Reputación: 29
Lepe Va por buen camino
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:

- Si devuelve False, pinto el circulo.
- Si devuelve True, cambio el cursor del ratón al símbolo de prohibido (dando a entender al usuario que ahí no puede pintar)
En el evento MouseMove, si la variable IsMouseDown está a true, llamo a la misma rutina Intersecta (con la nueva posición del ratón)

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.
Responder Con Cita