时间: 2021-07-31 作者:daque
很不爽的是,用delphi封装在form里的那些货色是没方法接收用户从我的电脑里拖放到你的form上的文献的,但在做软硬件的功夫这又是很需要的,我昨天接洽了一黄昏毕竟处置了这个题目。 开始,给你的project加一个unit,代码如次: unit untdrag; interface //用来报告windows你的form不妨接收文献拖放 {$externalsym dragacceptfiles}procedure dragacceptfiles(hwnd: cardinal; faccept: boolean); stdcall; //获得拖放文献名和文献个数的api {$externalsym dragqueryfile} function dragqueryfile(hdrop: cardinal; ifile: cardinal; lpszfile: pchar; cch: integer): integer; stdcall; //开释windows调配给拖放操纵的外存 {$externalsym dragfinish} procedure dragfinish(hdrop: cardinal); stdcall; //获得拖放的文献个数 function getdragfilecount(hdrop: cardinal): integer; //获得拖放的文献名,经过fileindex来指定文献编号,默许为第一个文献 function getdragfilename(hdrop: cardinal; fileindex: integer = 1): string; implementation procedure dragacceptfiles; external 'shell32'; function dragqueryfile; external 'shell32'; procedure dragfinish; external 'shell32'; function getdragfilecount(hdrop: cardinal): integer; const dragfilecount=high(cardinal); begin result:= dragqueryfile(hdrop, dragfilecount, nil, 0); end; function getdragfilename(hdrop: cardinal; fileindex: integer = 1): string; const size=255; var len: integer; filename: string; begin setlength (filename, size); len:= dragqueryfile(hdrop, fileindex-1, pchar(filename), size); setlength (filename, len); result:= filename; end; end. 而后,在你须要处置拖放的form的oncreate内里加上这么一句: dragacceptfiles (handle, true); 在tform1的public内里加上如次证明: procedure mydrag (var msg: twmdropfiles); message wm_dropfiles; 底下是此进程的实行: procedure tform1.mydrag (var msg: twmdropfiles); var hdrop: cardinal; ... begin hdrop:= msg.drop; //这个是拖放句柄 ...(在这边不妨用getdragfilename和getdragfilecount) //结果牢记要用这两句话: dragfinish (hdrop); msg.result:= 0; end; 固然,要在form的unit上头加上 uses untdrag;