
Ahora procederemos a colocar los procedimientos y objetos en el private del formulario, quedaría así:
delphi
type TForm1 = class(TForm) Panel1: TPanel; Image1: TImage; procedure FormCreate(Sender: TObject); private { Private declarations } PanelOriginal : TWndMethod; procedure PanelWindowProc (var Msg : TMessage) ; procedure PanelImageDrop (var Msg : TWMDROPFILES) ; public { Public declarations } end;
Ahora inicializamos el Panel para que podamos realizar las acciones de Drag & Drop:
delphi
procedure TForm1.FormCreate(Sender: TObject); begin PanelOriginal := Panel1.WindowProc; Panel1.WindowProc := PanelWindowProc; DragAcceptFiles(Panel1.Handle,true) ; end;
Ahora vamos a crear el código de los procedimientos declarados anteriormente:
PanelWindowProc
delphi
procedure TForm1.PanelWindowProc(var Msg: TMessage) ; begin if Msg.Msg = WM_DROPFILES then PanelImageDrop(TWMDROPFILES(Msg)) else PanelOriginal(Msg) ; end;
PanelImageDrop
delphi
procedure TForm1.PanelImageDrop(var Msg: TWMDROPFILES) ; var numFiles : longInt; buffer : array[0..MAX_PATH] of char; begin numFiles := DragQueryFile(Msg.Drop, $FFFFFFFF, nil, 0) ; if numFiles > 1 then begin ShowMessage('Sólo puedes insertar una imagen a la vez!') ; end else begin DragQueryFile(Msg.Drop, 0, @buffer, sizeof(buffer)) ; try Image1.Picture.LoadFromFile(buffer) ; except on EInvalidGraphic do ShowMessage('Formato de imagen no soportado, o no es una imagen!') ; end; end; end;
Compilamos el proyecto y arrastremos una imagen hacia el TPanel y veremos que se realiza el proceso de Drag & Drop y se carga la imagen

Espero que lo disfruten

Saludos.