unit DropFileListBox; interface uses Windows,Messages,classes,StdCtrls,ShellAPI; type tDropFileNotifyEvent=procedure(Sender:TObject;FileNames:TStringList) of Object; tDropFileListBox=class(TListbox) private fEnable:Boolean; fDropFile:tDropFileNotifyEvent; procedure DropFiles(Var Msg:TMessage);message WM_DROPFILES; procedure SetDropEnable(const Value: Boolean); public constructor Create(Aowner:TComponent);override; published property DropEnable:Boolean read fEnable write SetDropEnable; property OnDropFiles:tDropFileNotifyEvent read fDropFile write fDropFile; end; procedure Register; implementation procedure Register; begin RegisterComponents('Samples',[tDropFileListBox]); end; { tDropFileListBox } constructor tDropFileListBox.Create(Aowner: TComponent); begin inherited; fenable:=True; end; procedure tDropFileListBox.DropFiles(var Msg: TMessage); var FileNames:TStringList; fileName:array [1..MAX_PATH-1] of char; i,ncount:Integer; begin FileNames:=TStringList.Create; ncount:=DragQueryFile(msg.WParam,$FFFFFFFF,@FileName,MAX_PATH); for i := 0 to nCount - 1 do begin DragQueryFile(msg.WParam,i,@FileName,MAX_PATH) ; FileNames.Add(Filename); end; DragFinish(msg.WParam); if Assigned(fDropFile) then fDropfile(Self,FileNames); FileNames.free; end; procedure tDropFileListBox.SetDropEnable(const Value: Boolean); begin fEnable := Value; DragAcceptFiles(Handle,value); end; end.