Ver Mensaje Individual
  #9  
Antiguo 01-12-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.282
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
Creo que lo más sencillo será un ejemplo, y a partir de ahí tendrás un poco más de idea de a lo que me refiero; Algo sencillo, pero que te puede dar idea de cual podría ser el funcionamiento de lo que estoy pensando.
También te puede servir para hacer pruebas; No se trata de trabajar con ésto.
Creo que deberías tener claro antes de seguir las "especificaciones" de tu programa; Tal vez las cosas que debes hacer te las pueda solventar de forma "mejor" uno de ellos.
Como ya te han comentado:
* Tipo de figuras con las que vas a trabajar.
* Operacioes generales que debes implementar: Almacenar el dibujo, recuperarlo,...
* Operaciones sobre el area de dibujo que debes realizar; Selección de un elemento, moverlo con el ratón, borrarlo, cambiarle el tamaño con el ratón,...
* Propiedades de los objetos que debes modificar, como posición, tamaño, colores, líneas,...

A continuación hay un pequeño ejemplo de crear objetos (TShape) y poder moverlos con el ratón. Crea un nuevo projecto, en el formulario crea un botón, copia en el PAS lo que hay a continuación y asignale al evento OnClick del boton la rutina Button1Click; Puedes crear diferentes elementos y arrastrarlos por el form.

Código Delphi [-]
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    Capturing:Boolean;
    MouseDownSpot:TPoint;
    NumFiguras:Integer;
    procedure _IMGMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    procedure _IMGMouseUp(Sender: TObject; Button: TMouseButton;  Shift: TShiftState; X, Y: Integer);
    procedure _IMGMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
uses
  ExtCtrls;
procedure TForm1.Button1Click(Sender: TObject);
var
  Figura:TShape;
begin
  Randomize;
  // Crear un componentes
  Figura := TShape.Create(Self);
  Figura.Parent := Self;
  // Nombre
  Figura.Name := 'Elipse' + IntToStr(NumFiguras);
  // Posicion
  Figura.Top := 100 + (NumFiguras * 20);
  Figura.Left := 100 + (NumFiguras * 20);
  // Tamaño
  Figura.Height := 50;
  Figura.Width := 100;
  // Tipo de elemento
  Figura.Shape := TShapeType(Random(6));  // tipo de figura aleatorio
  NumFiguras := NumFiguras + 1;
  // Asignar para que pueda arrastrarse
  Figura.OnMouseMove := _IMGMouseMove;
  Figura.OnMouseDown := _IMGMouseDown;
  Figura.OnMouseUp := _IMGMouseUp;
  // Otras propiedades
  Figura.Cursor := crHandPoint;
  Figura.Brush.Color := RGB(Random(255), Random(255), Random(255));  // Color aleatorio
end;
procedure TForm1._IMGMouseDown(Sender: TObject; Button: TMouseButton;  Shift: TShiftState; X, Y: Integer);
begin
  Capturing := true;
  MouseDownSpot.X := x;
  MouseDownSpot.Y := Y;
end;
procedure TForm1._IMGMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  if Capturing then begin
    TWinControl(Sender).Left := TWinControl(Sender).Left - (MouseDownSpot.x - x);
    TWinControl(Sender).Top := TWinControl(Sender).Top - (MouseDownSpot.y - y);
  end;
end;
procedure TForm1._IMGMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if Capturing then begin
    ReleaseCapture;
    Capturing := false;
    TWinControl(Sender).Left := TWinControl(Sender).Left - (MouseDownSpot.x - x);
    TWinControl(Sender).Top := TWinControl(Sender).Top - (MouseDownSpot.y - y);
  end;
end;
end.

Si tienes dudas ya dirás...
__________________
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