![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
#4
|
||||
|
||||
|
Cita:
En primer lugar quizá podrías considerar otro tipo de superficie como un PaintBox en lugar de un Panel ya que este último carece de un Canvas para dibujar. Si es forzoso el uso de una Panel entonces tendrás que crearle un Canvas. Para ello declara una variable PanelCanvas de tipo TCanvas misma que inicializas en algún lugar antes de comenzar a dibujar, por ejemplo en el constructor del formulario:
Y no olvide destruirla con PanelCanvas.Free, por ejemplo en el destructor del formulario. Ahora vamos a suponer que Center es una variable de tipo TPoint con las coordenadas desde donde parte la línea. Puedes inicializar Center con las coordenadas del centro de la pantalla aunque sospecho que más bien te refieres al centro del panel. Si realmente es el centro de la pantalla entonces deberás convertir las coordenadas absolutas a coordenadas relativas al panel:
Ahora bien, para dibujar una línea dispones de varios métodos del objeto Canvas como LineTo y PolyLine. La parte problemática está en cómo mover la línea ya que tienes que ir borrando la posicíon anterior conforme desplazas el puntero. Desafortunadamente esto no es fácil ya que una vez que dibujas algo sobre el canvas pierdes toda la información de lo que tenías abajo y "borrar la línea" significa que debes reemplazar justamente lo que había abajo antes de dibujarla. La manera más fácil de lograr un efecto parecido es utilizando la técnica del XOR. Dibujar en modo XOR significa que el color de la pluma se combina con el color del canvas haciendo una operación xor de bits. Al repetir la operación xor se regresa a los bits originales, esto es, al color que originalmente haya habido. La desventaja de este método es que no tienes control sobre el color de la línea que se va dibujando ya que depende del color del fondo. Para implementar esto en el evento OnMouseMove lo único que tienes que hacer es, primero dibujar la línea anterior para borrarla y luego dibujar la línea en la nueva posición:
donde EndPoint es una variable de tipo Point que va manteniendo el punto final de la línea y que conviene que inicialices a lo mismo que Center. Algo muy común- que te pongo aquí a manera de resumen -es ir trazando la línea sólo cuando el botón del ratón está oprimido y dibujar la línea en su posición final (ahora sí con el color que se desee) al soltar el botón:
Aquí MouseDown es una variable booleana para inicar si el botón del ratón está presionado. // Saludos |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
|