| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4465 人关注过本帖
标题:如何实现资源管理器里的文件复制和粘贴,不是数据的复制和粘贴
只看楼主 加入收藏
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
类似功能的参考示例
of = CREATEOBJECT("myForm")
of.show(1)

DEFINE CLASS myForm as Form
    ADD OBJECT fList as FileList WITH width=this.Width,height=this.height
ENDDEFINE

DEFINE CLASS FileList as listbox
    RowSourceType=7
    sPath = ""
    sName = ""
   
    PROCEDURE RightClick
        IF FILE(this.list(2)+this.value)
            myPop(this)
        ENDIF
    ENDPROC
   
ENDDEFINE

FUNCTION myPop(oFileList)
    DEFINE POPUP pop FROM MROW(),MCOL()
    DEFINE BAR 1 OF pop PROMPT "复制"
    DEFINE BAR 2 OF pop PROMPT "粘贴"
    DEFINE BAR 3 OF pop PROMPT "删除"
    ON SELECTION POPUP pop mySelpop(POPUP(), PROMPT(), oFileList)
    ACTIVATE POPUP pop
    DEACTIVATE POPUP pop
    RELEASE POPUP pop
ENDFUNC

FUNCTION mySelpop(cPopup, cPrompt, oFileList)
    DO CASE
        CASE cPrompt == "复制"
            oFileList.sPath = oFileList.list(2)
            oFileList.sName = oFileList.value
        CASE cPrompt == "粘贴"
            IF !FILE(oFileList.sPath+oFileList.sName) OR (oFileList.sPath==oFileList.list(2))
                MESSAGEBOX("无效的文件名或路径")
                RETURN
            ENDIF
            COPY FILE (oFileList.sPath+oFileList.sName) TO (oFileList.list(2)+oFileList.sName)
            oFileList.Requery
            oFileList.sPath = ""
            oFileList.sName = ""
        CASE cPrompt == "删除"
            IF FILE(oFileList.list(2)+oFileList.value)
                IF MESSAGEBOX("删除 "+oFileList.value,17,"提示")==1
                    DELETE FILE (oFileList.list(2)+oFileList.value)
                    oFileList.Requery
                ENDIF
            ENDIF
        OTHERWISE
    ENDCASE
    DEACTIVATE POPUP (cPopup)
    RELEASE POPUP (cPopup)
ENDFUNC
2017-01-18 06:24
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:3 
以下是引用kmyz_yyl在2017-1-17 09:47:59的发言:

谢谢wcx_cc,你的思路我明白,但只能在VFP的环境下来完成,我希望的结果是在VFP的程序里实现资源管理器里菜单中复制和粘贴功能,并且能在资源管理器里实现粘贴。简单地说就是在VFP程序里复制文件,然后在资源管理器里的任意文件夹里可以粘贴。

可以用内存变量来保存文件名、源路径和目标路径,然后用VFP的copy file to命令来实现。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2017-01-18 08:50
kmyz_yyl
Rank: 2
等 级:论坛游民
帖 子:62
专家分:28
注 册:2012-11-13
收藏
得分:0 
复制是可以实现了,但在资源管理器里就粘贴不了了,如果要在资源管理器里也能粘贴,再请指点如何做

在百度下可以找到一些VB的例子,下面是两个VB例子,请读得懂VB程序的高手把它们转为VFP
Declare Integer OpenFile In kernel32 String lpFileName,String @lpReOpenBuff,Integer wStyle
Declare Integer GetFileSize In kernel32 Integer hFile,String @lpFileSize
Declare Integer CloseHandle In kernel32 Integer hObject
DECLARE INTEGER OpenClipboard IN user32 INTEGER hwnd
DECLARE INTEGER CloseClipboard IN user32
DECLARE INTEGER SetClipboardData IN user32 INTEGER wFormat, INTEGER hMem


Dim Files(0) As String
Dim dataObject As New DataObject
Files(0) = "E:\音乐\好歌\白狐.mpg"
dataObject.SetData(DataFormats.FileDrop, False, Files)
Clipboard.SetDataObject(dataObject)

***********************************

imagefile="d:\aaa.bmp"
hbitmap=loadimage(0,imagefile,image_bitmap,0,0,lr_loadfromfile)   
openclipboard(0)
emptyclipboard()
setclipboarddata(cf_bitmap,hbitmap)
closeclipboard()


lcReOpenBuff=Space(254)
lnHFile=OpenFile("&imagefile",@lcReOpenBuff,0)
MESSAGEBOX(lnHFile)

[此贴子已经被作者于2017-1-18 23:57编辑过]

2017-01-18 23:43
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
回复 23楼 kmyz_yyl
是调用几个与剪贴板相关的API函数,查查相关API使用说明就可以。

用剪贴板来复制文件的过程,就是先将文件内容读入剪贴板,再将剪贴板内容写入到文件,剪贴板当做文件缓存区,类似调用FREAD()和FWRITE()过程。用FREAD()和FWRITE()还具通用性,因剪贴板是有针对性的,有数据格式要求,这个搞错了会出异常。

之前也讨论过无需用剪贴板来复制文件,可否具体说说为何一定用剪贴板来复制文件?
2017-01-19 06:03
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:3 
以下是引用吹水佬在2017-1-19 06:03:02的发言:

是调用几个与剪贴板相关的API函数,查查相关API使用说明就可以。

用剪贴板来复制文件的过程,就是先将文件内容读入剪贴板,再将剪贴板内容写入到文件,剪贴板当做文件缓存区,类似调用FREAD()和FWRITE()过程。用FREAD()和FWRITE()还具通用性,因剪贴板是有针对性的,有数据格式要求,这个搞错了会出异常。

之前也讨论过无需用剪贴板来复制文件,可否具体说说为何一定用剪贴板来复制文件?

吹版,楼主是想在“VFP编写的软件”中选择复制,然后在“非VFP编写的软件”中如WINDOWS的资源管理中中粘贴,所以,他就强调“剪贴板”。
2017-01-19 08:34
金戈铁马2
Rank: 2
等 级:论坛游民
帖 子:83
专家分:85
注 册:2017-1-8
收藏
得分:3 
看不懂!
2017-01-19 11:52
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
以下是引用mywisdom88在2017-1-19 08:34:12的发言:


吹版,楼主是想在“VFP编写的软件”中选择复制,然后在“非VFP编写的软件”中如WINDOWS的资源管理中中粘贴,所以,他就强调“剪贴板”。

明白,看贴的图以为是在VFP完成“复制/粘贴”文件。
在VFP中“复制”,然后在非VFP中“粘贴”。这种情况通常是在文件编辑状态时对数据的输出输入,就象编辑文本文件时的Ctrl+C、Ctrl+V。只是通过文件名用“复制/粘贴”在两个应用软件中实现文件的复制,不清楚这样做的现实性和必要性?如WINDOWS的资源管理本身就可以自己完成“复制/粘贴”,为何要先在VFP“复制”再到资源管理“粘贴”?
2017-01-19 14:26
kmyz_yyl
Rank: 2
等 级:论坛游民
帖 子:62
专家分:28
注 册:2012-11-13
收藏
得分:0 
我对API知道的不多,更深的技术问题还有待学习,既然VFP实现不了跟资源管理器里一样的复制功能,就只好先舍弃这个预想了。

谢谢上楼各位老师的指点和帮助!
2017-01-19 21:55
快速回复:如何实现资源管理器里的文件复制和粘贴,不是数据的复制和粘贴
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014749 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved