H
hehanyang
Unregistered / Unconfirmed
GUEST, unregistred user!
我的一个办公管理软件里要用到上传下载文件到数据库里,为了操作方便,用户可以使用拖拽和复制,实现与windows的资源管理器方便结合。<br>如果在windows的资源管理器里选择几个文件后点了“复制”,到我的应用程序里要粘贴,我可以得到这些文件名,然后自己写代码把这些文件上传到服务器上去就可以了。这一步好实现我已经做出来了。但是反过来,如果在我的应用程序里选择了几个文件名后点了“复制”,如何在windows的资源管理器里点“粘贴”时将文件从服务器里下载到“粘贴”的目录里呢?<br>哪位高手知道呢?我现在的笨方法是:当在点了“复制”后,就立即将文件输出到临时目录,然后<br>用下面给出的ClipCutOrCopyFiles函数将文件名传给windows的资源管理器,问题是如果用户不“粘贴”了呢?岂不是白白输出文件浪费资源了吗?<br>type<br>DROPFILES = record<br> pFiles WORD ; // offset of file list<br> pt : TPOINT ; // drop point (coordinates depend on fNC)<br> fNC : BOOLean ; // see below<br> fWide : BOOLean ; // TRUE if file contains wide characters,<br>end; // FALSE otherwise<br>LPDROPFILES = ^DROPFILES;<br><br>const DROPEFFECT_COPY = 1;<br> DROPEFFECT_MOVE = 2;<br><br>procedure ClipCutOrCopyFiles(lpFileschar;uBufLen:UINT; bCopy:boolean);<br>var uDropEffect,uGblLen, uDropFilesLen: UINT ;<br> dpFiles : DROPFILES;<br> hGblFiles,hGblEffect:HGLOBAL;<br> szData,szFileList char;<br> dwDropEffect : PDword;<br>begin<br> uDropEffect:=RegisterClipboardFormat('Preferred DropEffect');<br> hGblEffect:=GlobalAlloc(GMEM_ZEROINIT or GMEM_MOVEABLE or GMEM_DDESHARE,sizeof(DWORD));<br> dwDropEffect:=GlobalLock(hGblEffect);<br> if(bCopy) then<br> dwDropEffect^:=DROPEFFECT_COPY<br> else<br> dwDropEffect^:=DROPEFFECT_MOVE;<br> GlobalUnlock(hGblEffect);<br><br> uDropFilesLen:=sizeof(DROPFILES);<br> dpFiles.pFiles :=uDropFilesLen;<br> dpFiles.pt.x:=0;<br> dpFiles.pt.y:=0;<br> dpFiles.fNC :=FALSE;<br> dpFiles.fWide := TRUE ; // False;<br><br> uGblLen:=uDropFilesLen+uBufLen*2+8;<br> hGblFiles:= GlobalAlloc(GMEM_ZEROINIT or GMEM_MOVEABLE or GMEM_DDESHARE, uGblLen);<br> szData:=GlobalLock(hGblFiles);<br> copymemory(szData,(@dpFiles),uDropFilesLen);<br> szFileList:=szData+uDropFilesLen;<br><br> MultiByteToWideChar(CP_ACP,MB_COMPOSITE,<br> lpFiles,uBufLen,PWCHAR( szFileList),uBufLen);<br><br> GlobalUnlock(hGblFiles);<br><br> if( OpenClipboard(0)  then<br> begin<br> EmptyClipboard();<br> SetClipboardData( CF_HDROP, hGblFiles <br> SetClipboardData(uDropEffect,hGblEffect);<br> CloseClipboard();<br> end;<br>end;