想实现ListView接受外部的拖放,如从资源管理器中拖一个文件到当前程序的ListView中,请问怎么实现??

解决方案 »

  1.   

    没做过
    但listview不是支持所有文件的托放的!·
    最笨的方法是一行行向里面写呗
      

  2.   

    http://www.delphibox.com/article.asp?articleid=15
    List列表拖放排序记忆演示
      

  3.   

    unit Unit1;interfaceuses
      Windows, ShellAPI, Messages, SysUtils, Variants, Classes, Graphics, Controls,
      Forms,
      Dialogs, StdCtrls, ComCtrls;type
      TForm1 = class(TForm)
        ListView1: TListView;
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
        procedure WMDropFiles(var Msg: TWMDropFiles); message WM_DROPFILES;
        procedure AppOnMessage(var Msg: TMsg; var Handled: Boolean);
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.AppOnMessage(var Msg: TMsg; var Handled: Boolean);
    var
      WMD: TWMDropFiles;
    begin
      if Msg.message = WM_DROPFILES then
      begin
        //    MessageBeep(0);
        WMD.Msg := Msg.message;
        WMD.Drop := Msg.wParam;
        WMD.Unused := Msg.lParam;
        WMD.Result := 0;
        WMDropFiles(WMD);
        Handled := TRUE;
      end;end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      DragAcceptFiles(listview1.Handle, True);
      //  DragAcceptFiles(Handle, True);
    //  DragAcceptFiles(Application.Handle, True);
      Application.OnMessage := AppOnMessage;end;procedure TForm1.WMDropFiles(var Msg: TWMDropFiles);
    var
      N: Word;
      buffer: array[0..180] of Char;
      item: TListItem;
    begin  with Msg do
      begin
        for N := 0 to DragQueryFile(Drop, $FFFFFFFF, buffer, 1) - 1 do
        begin
          DragQueryFile(Drop, N, Buffer, 80);
          Item := ListView1.Items.Add;
          item.Caption := StrPas(Buffer);
         end;
        DragFinish(Drop);
      end;end;end.
      

  4.   

    void __fastcall TForm2::DragDropFiles(TMessage &msg)
    {
        char FileName[_MAX_PATH];  // 缓冲区
        int i, Sum;     // 获得拖拉的文件数目,该功能由第二个参数决定
        Sum = DragQueryFile( HDROP(msg.WParam), 0xFFFFFFFF, NULL, 0);  // 显示拖拉文件的数目
        for( i=0; i<Sum; i++ )
        {
            // 获取第i个拖拉文件的名字,并保存在缓冲区FileName中
            DragQueryFile( HDROP(msg.WParam), i, FileName, _MAX_PATH);
            Form2->ListBox1->Items->Add(FileName);     //根据扩展名,判断是否加到文件列表中
                        ListBox1->Items->Delete(Form2->ListBox1->Items->Count-1);
        }
        // 释放应用程序为传递文件名而开辟的内存空间
        DragFinish( HDROP(msg.WParam) );自己整理一下!