我该怎么拖?从shell中删除文件?

时间:2014-08-21 11:59:18

标签: delphi drag-and-drop delphi-xe6

我正在尝试从桌面拖放视频文件(如.avi)但是ı不能把它带到我的程序。但是当我尝试拖放到我的程序里面时它工作正常。对于前:我在我的专业版中有一个edittext和一个列表框,可以将edittext里面的文本移动到listbox.I无法得到有什么区别?

我使用openDialog拍摄视频。但是想通过拖放来改变它。

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;

4 个答案:

答案 0 :(得分:11)

这是一个简单的演示,如何将文件从Windows资源管理器拖放到ListBox(对于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.

答案 1 :(得分:4)

您可以捕获WM_DROPFILES消息。

首先,设置表单将“接受”在FormCreate过程中拖动文件:

DragAcceptFiles(Self.Handle, True);

之后,在所需的表单类中声明该过程:

procedure WMDropFiles(var Msg: TMessage); message WM_DROPFILES;

最后,按如下方式填写程序正文:

procedure TForm1.WMDropFiles(var Msg: TMessage);
begin
  // do your job with the help of DragQueryFile function

  DragFinish(Msg.WParam);
end

答案 2 :(得分:4)

您也可以使用Raize软件中的DropMaster

答案 3 :(得分:3)

或者,请查看Anders Melander的"The Drag and Drop Component Suite for Delphi"。它与32位一样工作,并且可以使用64位进行一些调整(阅读博客 - 它已被第三方升级)。