给你看段关于如何拖拉的代码吧,至于拿到文件后如何播放你自己去做吧。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
ListBox1: TListBox;
Label1: TLabel;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
procedure WMDROPFILES(var Msg: TMessage);
procedure LBWindowProc(var Message: TMessage);
procedure AddFile(sFileName: string);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
uses
ShellAPI;
var
OldLBWindowProc: TWndMethod;
procedure TForm1.AddFile(sFileName: string);
begin
ListBox1.Items.Add(sFilename);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
OldLBWindowProc := ListBox1.WindowProc;
// store defualt WindowProc
ListBox1.WindowProc := LBWindowProc;
// replace default WindowProc
DragAcceptFiles(ListBox1.Handle, True);
// now ListBox1 accept dropped files
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
ListBox1.WindowProc := OldLBWindowProc;
DragAcceptFiles(ListBox1.Handle, False);
end;
procedure TForm1.LBWindowProc(var Message: TMessage);
begin
if Message.Msg = WM_DROPFILES then
WMDROPFILES(Message);
// handle WM_DROPFILES message
OldLBWindowProc(Message);
// call default ListBox1 WindowProc method to handle all other messages
end;
procedure TForm1.WMDROPFILES(var Msg: TMessage);
var
pcFileName: PChar;
i, iSize, iFileCount: integer;
begin
pcFileName := '';
// to avoid compiler warning message
iFileCount := DragQueryFile(Msg.wParam, $FFFFFFFF, pcFileName, 255);
for i := 0 to iFileCount - 1do
begin
iSize := DragQueryFile(Msg.wParam, 0, nil, 0) + 1;
pcFileName := StrAlloc(iSize);
DragQueryFile(Msg.wParam, i, pcFileName, iSize);
if FileExists(pcFileName) then
AddFile(pcFileName);
// method to add each file
StrDispose(pcFileName);
end;
DragFinish(Msg.wParam);
end;
end.