Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Gráficos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-03-2005
Noitam Noitam is offline
Registrado
 
Registrado: mar 2005
Posts: 1
Poder: 0
Noitam Va por buen camino
Dibujar en delphi

bueno, escribo aqui en busca de ayuda para hacer un pain en delphi y principalmente esa es la idea
de momento e intentado dibujar una linea en un image o un paintbox, lo e conseguido, pero la idea es que la linea se dibuje con forme arrastre el cursor y quede como definitiva cuando lo suelte.
una cosa que observe, es que el evento onmouseup se activa al soltar cualqueir boton y necesito saber que boton se solto para que no me dibuje lineas con el otro boton del mause xD
si alguien me puede ayudar, me haria un gran favor
Noitam
Responder Con Cita
  #2  
Antiguo 14-03-2005
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Bueno, no es complicado, se trata de jugar con los eventos del Mouse.
Define en la parte privada un par de variables como éstas:

Código Delphi [-]
     _Painting:Boolean;  // Para marcar cuando estamos pintando
     _origen:TPoint;      // punto origen de la línea

Y en los eventos del Mouse del PintBox lo siguiente:

Código Delphi [-]
 procedure TForm1.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton;
   Shift: TShiftState; X, Y: Integer);
 begin
 
   _Painting := True;
   _origen.X := x;
   _origen.Y := Y;
 
 end;
 
 procedure TForm1.PaintBox1MouseUp(Sender: TObject; Button: TMouseButton;
   Shift: TShiftState; X, Y: Integer);
 begin
   _Painting:= False;
 
   PaintBox1.Canvas.Pen.Width := 2;
   PaintBox1.Canvas.Pen.Color := clRed;
   PaintBox1.Canvas.MoveTo(_origen.X, _origen.Y);    (*1*)
   PaintBox1.Canvas.LineTo(x,y);                (*1*)
 
 end;
 
 procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,  Y: Integer);
 begin
   // Si se debe pintar...
   if _Painting then begin
     // Borrar
     PaintBox1.Canvas.FillRect(Self.PaintBox1.ClientRect);
     // pintar
     PaintBox1.Canvas.Pen.Color := clRed;
     Canvas.Polyline([Point(_origen.X, _origen.Y), Point(x,y)]);   (*2*)
   end;
 end;

Para distinguir entre un botón y otro del mouse, verás que exixte un parámetro Button: TMouseButton que te da esa información.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.

Última edición por Neftali [Germán.Estévez] fecha: 19-07-2006 a las 10:24:31.
Responder Con Cita
  #3  
Antiguo 16-03-2005
Avatar de darkerbyte
darkerbyte darkerbyte is offline
Miembro
 
Registrado: feb 2005
Posts: 196
Poder: 20
darkerbyte Va por buen camino
Otra idea

Yo hice un programa parecido al corel draw o al ilustrator, pero las tecnicas de dibujo son las mismas. Por que no utilizas mejor 2 Timage, uno encima de otro, el primero definelo como transparente. y utiliza las rutinas que ya te proporcionaron en la respuesta anterior, en el evento onmousedow guarda el punto de origen, en el evento onmousemove limpia el timage y traza una linea del punto original a la posiciòn del mouse, en el evento onmouseup guarda el segundo punto, ya teniendo ambos puntos , coloca el punto activo del pixel del cavans en el punto 1 y luego usa el procedimiento lineto(x,y) al punto dos

Pronto subire el programa que hice con el codigo a mi pagina, cuando lo haga te aviso.

Perdona pero no tengo el codigo a la mano, asi que no recuerdo el nombre correcto de las rutinas.
Responder Con Cita
  #4  
Antiguo 17-04-2006
soloriv soloriv is offline
Miembro
 
Registrado: jul 2004
Posts: 75
Poder: 20
soloriv Va por buen camino
Hola a todos
Segui este hilo y mi consulta es como hacer lo mismo pero con un jpeg dado que me da como error no es un bmp, si es posible, si no tendre que convertir.
Y la otra duda es que siendo bmp la imagen en un image o paintbox al arrastrar el mouse la imagen se pierde completamente y se vuelve un cuadro blanco. Necesitaria crear un bitmap para que esto no ocurra o como lo solucionaria.
Saludos y Gracias Soloriv.
Responder Con Cita
  #5  
Antiguo 19-07-2006
pattyka pattyka is offline
Miembro
 
Registrado: jun 2006
Posts: 26
Poder: 0
pattyka Va por buen camino
Question

como dibujar un circulo con los eventos del mouse en paintbox como se hace???... porfavor
Responder Con Cita
  #6  
Antiguo 19-07-2006
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por pattyka
como dibujar un circulo con los eventos del mouse en paintbox como se hace???
Hola.
Antes de nada te recomiendo que revises la Guia de estilo.

Para dibujar un circulo/Elipse utilizando el código que hay arriba, puedes cambiar las dos líneas dode aparece (*1*) por éste código:

Código Delphi [-]
  PaintBox1.Canvas.Ellipse(_origen.X, _origen.Y, x,y);

Y la línea donde pone (*2*) por esta:

Código Delphi [-]
Canvas.Ellipse(_origen.X, _origen.Y, x,y);
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #7  
Antiguo 26-09-2006
jorllazo jorllazo is offline
Miembro
 
Registrado: sep 2006
Ubicación: Valencia, España
Posts: 83
Poder: 18
jorllazo Va por buen camino
Vale... Ahora, a ver si esto es posible con el paintBox o con cualquier otro control.
dispongo de una Tree View en la que guardo todos los cuadrados, circulos que pinto dentro del paint box Ej

Dibujo1
|
|-- Cuadro 1
|-- Cuadro 2

Etc.... como se puede hacer para que Seleccionando Cuadro1 o Cuadro 2 por ejemplo cambie de color en la PaintBox? es Decir saber que elemento del dibujo se ha seleccionado.
__________________
Gracias de Antemano

Última edición por jorllazo fecha: 26-09-2006 a las 08:43:41.
Responder Con Cita
  #8  
Antiguo 26-09-2006
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Si estás pensando en este tipo de operaciones, la técnica de pintar directamente sobre un paintBox (o similar) tal vez no sea la más adecuada; Debería revisar éste control (TSimpleGraph); Es especial para éste tipo de cosas.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #9  
Antiguo 26-09-2006
jorllazo jorllazo is offline
Miembro
 
Registrado: sep 2006
Ubicación: Valencia, España
Posts: 83
Poder: 18
jorllazo Va por buen camino
MMmm...
creo que no me sirve ese control.

Posiblemente tuviera que redibujar la pantalla y cambiar el relleno de la forma en particular. por que tengo sus coordenadas, pero al reves?, me refiero pinchando en la forma en particular, que me dijera cual es?
__________________
Gracias de Antemano
Responder Con Cita
  #10  
Antiguo 26-09-2006
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por jorllazo
creo que no me sirve ese control.
¿Porque no? No lo entiendo
El problema de dibujar directamente sobre el canvas, es que lo que dibujas no es un objeto en sí, sino pixels de colores. Si quieres seleccionar, modificar, mover,... los objetos que dibujas, deben ser objetos como tal y no pixels pintados. No se si me explico.
Sea con este componente, con otro, o manualmente debes guardar la información completa de lo que estás dibujando, poder seleccionarlo y redibujar cuando cambias algo. Puedes hacerlo "a mano", pero este componente ya lo tiene implementado.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #11  
Antiguo 26-09-2006
jorllazo jorllazo is offline
Miembro
 
Registrado: sep 2006
Ubicación: Valencia, España
Posts: 83
Poder: 18
jorllazo Va por buen camino
Puede que si me funcione, el caso es que lo probare...
Sucede que si te encabezonas con la idea inicial que llevas..
ver a ver si tiene aplicacion...

Gracias.
__________________
Gracias de Antemano

Última edición por jorllazo fecha: 26-09-2006 a las 12:08:20.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 19:07:26.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi