Hola,
El siguiente código está basado en el que un compañero
publicó en
cierto Hilo en estos Foros hace un tiempo.
Código Delphi
[-]
unit Unit1;
interface
uses
Forms, Messages;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
procedure OnDragDrop(var msg:TWMDropFiles); message WM_DROPFILES;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses
Windows, ShellApi, Dialogs;
procedure TForm1.FormCreate(Sender: TObject);
begin
DragAcceptFiles(Self.Handle, true);
end;
procedure TForm1.OnDragDrop(var msg: TWMDropFiles);
var
archivo:array[0..MAX_PATH] of char;
begin
DragQueryFile(msg.drop, 0, archivo, sizeof(archivo));
try
ShowMessage(archivo);
except
MessageBox(handle, 'No pude abrir el archivo', nil, MB_ICONERROR);
end;
DragFinish(msg.drop);
end;
end.
Quedaría adentrarse un tanto más y comprobar, por ejemplo, si se "arrastraron" varios archivos al formulario de marras.
Edito: No me quedo muy a gusto con el código anterior. Ese bloque "try .. except" no me acaba de convencer. En todo caso, sirva como idea que puede tomarse para seguir adelante. Por ejemplo, esta podría ser una forma (no digo que no haya más porque no me he molestado en comprobarlo) de atender a todos los archivos arrastrados al formulario:
Copio el código del método "OnDragDrop" únicamente; el resto del código fuente no cambia:
Código Delphi
[-]
procedure TForm1.OnDragDrop(var msg: TWMDropFiles);
var
i: integer;
archivo: array[0..MAX_PATH] of char;
begin
i := 0;
while DragQueryFile(msg.drop, i, archivo, sizeof(archivo)) <> 0 do
begin
Inc(i);
ShowMessage(archivo);
end;
DragFinish(msg.drop);
end;