delphi - ¿Cómo puedo arrastrar y soltar un archivo desde el caparazón?
drag-and-drop delphi-xe6 (4)
Alternativamente, echa un vistazo a "The Drag and Drop Component Suite for Delphi" de Anders Melander. Funciona tal como está con 32 bits y con algunos ajustes también puede funcionar con 64 bits (lea el blog, ha sido actualizado por terceros).
Esta pregunta ya tiene una respuesta aquí:
- Aplicación cruzada de arrastrar y soltar en Delphi 2 respuestas
Estoy intentando arrastrar y soltar un archivo de video (como .avi) desde el escritorio. Pero no puedo llevarlo al programa. Pero cuando intento arrastrar y soltar dentro de mi programa, funciona bien. Por ejemplo, tengo un texto de edición. y un cuadro de lista dentro de mi pro y puedo mover el texto dentro de edittext a listbox.I could not get what is the difference ??
Tomo el video usando openDialog. Pero quiero cambiarlo arrastrando y soltando.
procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
MediaPlayer1.DeviceType:=dtAutoSelect;
MediaPlayer1.FileName := OpenDialog1.FileName;
Label1.Caption := ExtractFileExt(MediaPlayer1.FileName);
MediaPlayer1.Open;
MediaPlayer1.Display:=Self;
MediaPlayer1.DisplayRect := Rect(panel1.Left,panel1.Top,panel1.Width,panel1.Height);
panel1.Visible:=false;
MediaPlayer1.Play;
end;
end;
Aquí hay una demostración simple de cómo arrastrar y soltar archivos desde el Explorador de Windows en un ListBox (para Delphi XE):
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
ListBox1: TListBox;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
protected
procedure WMDropFiles(var Msg: TMessage); message WM_DROPFILES;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses ShellAPI;
procedure TForm1.FormCreate(Sender: TObject);
begin
DragAcceptFiles(Handle, True);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
DragAcceptFiles(Handle, False);
end;
procedure TForm1.WMDropFiles(var Msg: TMessage);
var
hDrop: THandle;
FileCount: Integer;
NameLen: Integer;
I: Integer;
S: string;
begin
hDrop:= Msg.wParam;
FileCount:= DragQueryFile (hDrop , $FFFFFFFF, nil, 0);
for I:= 0 to FileCount - 1 do begin
NameLen:= DragQueryFile(hDrop, I, nil, 0) + 1;
SetLength(S, NameLen);
DragQueryFile(hDrop, I, Pointer(S), NameLen);
Listbox1.Items.Add (S);
end;
DragFinish(hDrop);
end;
end.
Puede ver el mensaje WM_DROPFILES.
Primero, establezca que su formulario "aceptará" que los archivos no se arrastren en el procedimiento FormCreate:
DragAcceptFiles(Self.Handle, True);
Después, declare el procedimiento en la clase de formulario deseada:
procedure WMDropFiles(var Msg: TMessage); message WM_DROPFILES;
Finalmente, complete el cuerpo del procedimiento de la siguiente manera:
procedure TForm1.WMDropFiles(var Msg: TMessage);
begin
// do your job with the help of DragQueryFile function
DragFinish(Msg.WParam);
end
También puede usar DropMaster desde el software Raize.