Tema: Graficos
Ver Mensaje Individual
  #2  
Antiguo 15-10-2004
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.293
Reputación: 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
Así a primeras y viendo que ésto lo vas a tener que hacer con diferentes figuras supongo yo pensaría en crear un componente (no dibujar directamente sobre el área de dibujo) que te soporte todos éstos métodos (selección visual, borrado, arrastrar,...), ya que sino tendrías que programar cada objeto o "linkar" los eventos necesarios de todos ellos a medida que los vayas creando en ejecución.
Yo te conteste como si fuera sobre un control individual, pero te vuelvo a decir que creo que deberías abstraerlo y pasarlo a un nuevo componente.

Cita:
Empezado por Luli
...pero necesito controlar la figura, es decir, poder moverla por el area de dibujo con el ratón, hasta dejarla donde yo quiera.
Eso puedes hacerlo programando los eventos del ratón; MouseDown, MouseMove y MouseUp; Prueba algo como ésto en un componente TImage, te puede servir para sacar la idea.

Código Delphi [-]
...
    Capturing:Boolean;
    MouseDownSpot:TPoint;
...
 
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if Capturing then begin
    TImage(Sender).Left := TImage(Sender).Left - (MouseDownSpot.x - x);
    TImage(Sender).Top := TImage(Sender).Top - (MouseDownSpot.y - y);
  end;
end;
 
procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Capturing then begin
    ReleaseCapture;
    Capturing := false;
    TImage(Sender).Left := TImage(Sender).Left - (MouseDownSpot.x - x);
    TImage(Sender).Top := TImage(Sender).Top - (MouseDownSpot.y - y);
  end;
end;
 
procedure TForm1.Image1MouseDown(Sender: TObject; Button:MouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Capturing := true;
  MouseDownSpot.X := x;
  MouseDownSpot.Y := Y;
end;

Cita:
Empezado por Luli
Además necesito poder modificar el tamaño de la figura, algo asi como si estuviera en paint.
Para eso entiendo que vas a tener que conseguir hacer algo como lo que hace el Paint de dibujar un marco con 8 puntos para poder seleccionar el componente; La idea de funcionamiento es similar a la explicada antes (utilizando los mismos eventos), solo que si marcas la imagen se mueve y si marcas en el borde se cambia el tamaño.

Cita:
Empezado por Luli
Otra cosa, ¿como puedo hacer que se borre la figura que dibujé? Estoy usando un Timage como area de dibujo dentro de mi formulario.
Bueno, si trabajas con objetos (no dibujando sobre el área de dibujo, eliminando el componente tendrás esa parte echa).

Existe un componente que sirve para lo que estás programando, no se si puedes utilizarlo, o necesitas fabricarlo tú; En cualquier caso te puede servir de guía.

http://www.delphiarea.com/products/simplegraph/
__________________
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