Hola Inés.
Un ejemplo de como pienso que podrías implementar lo que estas buscando sobre el manejo de las imágenes.
El mismo usa un
TImage por cada elemento a insertar (server, terminal, router, etc) que residen en un
TScrollBox y como destino contenedor un
TPanel.
Código Delphi
[-]
...
implementation
uses Contnrs;
var
List: TObjectList;
procedure TForm1.FormCreate(Sender: TObject);
begin
List := TObjectList.Create;
end;
procedure TForm1.ImageMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if ssCtrl in Shift then TImage(Sender).BeginDrag(True); end;
procedure TForm1.Panel1DragDrop(Sender, Source: TObject; X,
Y: Integer);
var
new: TImage;
begin
new := TImage.Create(nil);
new.Picture.Bitmap.Assign(TImage(Source).Picture.Bitmap);
new.Parent := Panel1;
new.Stretch:= True;
new.Left := X;
new.Top := Y;
List.Add(new)
end;
procedure TForm1.Panel1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Accept := (Source is TImage);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
List.Free;
end;
El resultado es este:
Como mencionaste que usas la clase
TCanvas para dibujar las conexiones, previamente deberás interponer la clase
TPanel y publicar la propiedad
Canvas para poder usarla en él:
Código Delphi
[-]
...
type
TPanel = class(ExtCtrls.TPanel)
public
property Canvas;
end;
TForm1 = class(TForm)
ScrollBox1: TScrollBox;
Panel1: TPanel;
Image1: TImage;
Image2: TImage;
Image3: TImage;
...
Saludos