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
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
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses
ExtCtrls;
procedure TForm1.Button1Click(Sender: TObject);
var
Figura:TShape;
begin
Randomize;
Figura := TShape.Create(Self);
Figura.Parent := Self;
Figura.Name := 'Elipse' + IntToStr(NumFiguras);
Figura.Top := 100 + (NumFiguras * 20);
Figura.Left := 100 + (NumFiguras * 20);
Figura.Height := 50;
Figura.Width := 100;
Figura.Shape := TShapeType(Random(6)); NumFiguras := NumFiguras + 1;
Figura.OnMouseMove := _IMGMouseMove;
Figura.OnMouseDown := _IMGMouseDown;
Figura.OnMouseUp := _IMGMouseUp;
Figura.Cursor := crHandPoint;
Figura.Brush.Color := RGB(Random(255), Random(255), Random(255)); 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...