答案: 想实现ListView接受外部的拖放,如从资源管理器中拖一个文件到当前程序的ListView中,请问怎么实现?? --------------------------------------------------------------- unit Unit1; interface uses 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.