最近在经常碰到有人问如何在DELPHI编程的时候,让程序接受外部拖动而来的内容并处理。 就是处理wm_dropfiles消息以及使用DragAcceptFiles、dragqueryfile、dragfinish来操作,这些内容在DELPHI中被封装在shellapi中,编程的时候,要uses这个单元。 在这里用一个例子演示,以后再回答此问题的时候就不用再写了。
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,shellapi; // 要使用到shellapi中的内容 type TForm1 = class (TForm) Memo1: TMemo; Label1: TLabel; procedure FormCreate(Sender: TObject); private // 处理WM_DROPFILES消息 procedure dragdropfile(var msg : tmessage);message wm_dropfiles; public ... { Public declarations } end;var Form1: TForm1;implementation ... {$R *.dfm} procedure TForm1.dragdropfile(var msg: tmessage);var char1:array[ 0 .. 128 ] Of char ; char2 : pchar; i,sum :integer;begin // 获得拖动的数量 sum : = dragqueryfile(msg.wparam,$FFFFFFFF,nil, 0 ); // 用一个label显示此数量 label1.caption : = inttostr(sum); char2 : = @char1; for i : = 0 to sum - 1 do begin // 将拖动文件的路径存放到char2并通过一个memo来显示 DragQueryFile(msg.wparam,i,char2, 128 ); memo1.lines.add(char2);end; dragfinish(msg.wparam); // 结束 end;procedure TForm1.FormCreate(Sender: TObject);begin // 让程序接受外部拖动 DragAcceptFiles(Handle, true );end;end.
注:WINXP+D7,转载请注明出处