//其实form和其他空间没有什么区别啊,我想大概就是不同程序见的drag&drop吧,
//以下是把外部的文件拖放入本应用程序中,你自己看看吧
//如果还不能满足你,再说吧
unit Unit1;
interface
uses
; Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
; StdCtrls;
type
; TForm1 = class(TForm)
; ; ListBox1: TListBox;
; ; 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 - 1 do
; 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.
;