delphi drag-and-drop delphi-xe6

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í:

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.