1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| unit ListViewDD;
interface
uses
Messages,SysUtils, Classes, Controls, ComCtrls, ShellAPI;
type
TListViewDragFileEvent = procedure(ListView : TListView; FileName : String) of object;
TListViewDD = class(TListView)
private
FOnDragFile : TListViewDragFileEvent;
protected
procedure CreateWnd; override;
procedure DestroyWnd; override;
procedure DropMsg(var msg: TWMDropFiles); message WM_DROPFILES;
public
published
property OnDragFile : TListViewDragFileEvent read FOnDragFile write FOnDragFile;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Demo', [TListViewDD]);
end;
procedure TListViewDD.DropMsg(var msg: TWMDropFiles);
var
i, Count : integer;
FileName: string;
Files: array[0..512] of Char;
begin
Count := DragQueryFile(Msg.Drop, $FFFFFFFF, nil, 0);
for i := 0 to Count - 1 do
begin
FileName:= Copy(Files, 0, DragQueryFile(Msg.Drop, i, Files, 512));
if Assigned(FOnDragFile) then FOnDragFile(Self,FileName);
end;
Msg.Result:=0;
DragFinish(Msg.Drop);
end;
procedure TListViewDD.CreateWnd;
begin
inherited;
if not (csDesigning in ComponentState) then DragAcceptFiles(Handle,True);
end;
procedure TListViewDD.DestroyWnd;
begin
if not (csDesigning in ComponentState) then DragAcceptFiles(Handle, False);
inherited;
end;
end. |
Partager