如何区分剪贴版对于文件的拷贝与剪切操作(200分)

  • 主题发起人 主题发起人 Alan Jiang
  • 开始时间 开始时间
A

Alan Jiang

Unregistered / Unconfirmed
GUEST, unregistred user!
如何区分剪贴版对于文件的拷贝与剪切操作?
我需要在程序中通过剪贴版实现文件的拷贝与剪切操作,以及粘贴操作.
但我不知道该如何区分则两类操作,有人告诉我用CFSTR_PREFEREFECT来实现.
但我不知该这么用!
 
通过TClipBoard.SetTextBuf copy, 通过TClipBoard.GetTextBuf paste.
或者用API SetClipBoardData copy, GetClipBoardData paste.
如果要知道用户是copy or cut or paste, 跟踪WM_COPY,WM_CUT和WM_PASTE消息不
就知道了?
 
在Delphi中使用TClipBoard.AsText可以简单的把一个文件名列表存入(获取出)到
剪接板中. 如下例使用OpenDialog选者多个文件名放到Memo1中, 然后通过剪接板
把文件名传给Memo2.

procedure TForm1.Button1Click(Sender: TObject);
var ClipBoard: TClipBoard;
begin
OpenDialog1.Options:=OpenDialog1.Options + [ofAllowMultiSelect];
if OpenDialog1.Execute then
begin
Memo1.Lines := OpenDialog1.Files;
ClipBoard:=TClipBoard.Create;
ClipBoard.AsText:=Memo1.Text;
Memo2.PasteFromClipboard;
ClipBoard.Free;
end;
end;

Cut,Copy,Paste,Delete文件是由用户确定的.
1. 如果需要Cut+Paste到不同目录, Move这些文件到新目录即可
2. 如果Paste到相同目录, Copy成不同的文件名
3. 如果删除, 送到垃圾箱
如何移动, 复制, 删除, 送到垃圾箱应该没有为提吧? 如有, 参见已答问题
 
把二进制对象copy ,paste到剪贴版可以用Assign方法,
如拷贝一个bmp到剪贴版,
ClipBoard:=TClipBoard.Create;
Bitmap1.LoadfromFile('test.bmp');
ClipBoard.Assign(Bitmap);
ClipBoard.Free;
从剪贴版Paste
ClipBoard:=TClipBoard.Create;
if Clipborad.HasFormat(CT_BITMAP) then
Bitmap.Assgin(ClipBoard);
ClipBoard.Free;
 
好象所答非所问!
 
谁说的?
我不是回答了?
WM_COPY, WM_PASTE
 
请大家注意:
我想自己写一个与win95种的"我的电脑"显示的文件管理器.他可以通过剪贴板与其他程序交互.所以剪贴板格式必须为CF_HDROP或类似格式.而不能用自定义的格式或
CF_TEXT的格式.
另外,游人能告诉我如何实现"我的电脑"中的"撤消"操作吗?必须能撤消其他程序中的移动或拷贝操作.
 
撤消操作?自己保存上一步做的事情,然后需要的话恢复,95好象是这样赶的.
CLIPBOARD有许多相关的SOURCE,找些来读吧
 
在你的"管理器"里监视菜单和键盘操作来确定用户是cut还是copy还是paste啦
 
我要求的功能是:
无论与本程序通过剪贴板交互的其他程序是何种类型,
也不管他们向剪贴板发送的数据是否在本程序启动以前就已放送.
我只要遵循CF_HDROP或类似格式,就可以接收并处理.并能分清是
对文件的剪切操作还是拷贝操作!
 
可能回答不对Alan Jiang的口味,请大虾们继续来
 
Alan Jiang:

这个问题已经很长时间没有人参加讨论,为保持版面
整洁,节约网友时间,请提问者采取必要处理措施。
关于本版管理细则,请参见<a href="http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=111927">这个</a>问题。如两天
内提问者没有响应,我将采取强制措施。

如有管理建议,请到<a href="http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=111927">这里</a>提出。谢谢!
 
多人接受答案了。
 
后退
顶部