Cita:
Empezado por MAXIUM
Hola. Nunca he realizado esto y no logro entenderlo
Quisiera arrastrar un archivo cualquiera, sea texto, video o imagen a un TImage y que la ruta de este, aparezca en un TEdit.
|
No es complicado.
Entendiendo los pasos, con unas pocas líneas se puede conseguir.
Necesitas un componente que reciba los ficheros; En este ejemplo he usado un panel, pero puede ser un TImage, el formulario completo,...
En este caso admite varios ficheros; En ese caso llamará varias veces al procedimiento
AddFiles.
Añado
el ejemplo completo al FTP del Club.
He colocado un panel en el formulario y le he llamado
pnlArrastrar.
Y te adjunto el código necesario con los comentarios necesarios.
Código Delphi
[-]unit uMain;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls;
type
TForm3 = class(TForm)
pnlArrastrar: TPanel; procedure FormCreate(Sender: TObject);
private
procedure LBWindowProc(var Message: TMessage);
procedure WMDROPFILES(var Msg: TMessage);
procedure AddFile(AFileName:String);
end;
var
Form3: TForm3;
OldLBWindowProc: TWndMethod;
implementation
{$R *.dfm}
uses
ShellAPI;
procedure TForm3.AddFile(AFileName: String);
begin
Caption := 'Fichero: ' + AFileName;
end;
procedure TForm3.FormCreate(Sender: TObject);
begin
OldLBWindowProc := pnlArrastrar.WindowProc;
pnlArrastrar.WindowProc := LBWindowProc;
DragAcceptFiles(pnlArrastrar.Handle, True);
end;
procedure TForm3.LBWindowProc(var Message: TMessage);
begin
if Message.Msg = WM_DROPFILES then
WMDROPFILES(Message); OldLBWindowProc(Message);
end;
procedure TForm3.WMDROPFILES(var Msg: TMessage);
var
pcFileName: PChar;
i, iSize, iFileCount: integer;
begin
pcFileName := '';
iFileCount := DragQueryFile(Msg.wParam, $FFFFFFFF, pcFileName, 255);
for i := 0 to iFileCount - 1 do begin
iSize := DragQueryFile(Msg.wParam, i, nil, 0) + 1;
pcFileName := StrAlloc(iSize);
DragQueryFile(Msg.wParam, i, pcFileName, iSize);
if FileExists(pcFileName) then begin
AddFile(pcFileName); end;
StrDispose(pcFileName);
end;
DragFinish(Msg.wParam);
end;
end.