高手請進:Delphi中使用ListView控件得到數據,如何將其數據實現復制、剪切、粘貼?

kye_jufei 2006-09-16 09:00:45
復制代碼如下:
procedure TMain_Frm.N1Click(Sender: TObject);
var
StrKye,StrHGpm:string;
begin
if ListView1.Selected<>nil then
begin
//SendMessage (ActiveControl.Handle, WM_Copy, 0, 0);
// SendMessage(ListView1.Selected.Handle,WM_COPY,0,0);
strkye:=ListView1.Selected.Caption;
SendMessage( ListView1.Selected.Handle,WM_COPY,0,0);
StrHGpm:=ListView1.Selected.SubItems[0];
end;
end;

當粘貼時:為何粘貼不到數據,而粘貼出來為何是以下代碼:

SendMessage( ListView1.Selected.Handle,WM_COPY,0,0);


...全文
365 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
spirit_sheng 2006-10-28
  • 打赏
  • 举报
回复
由于ListView的数据一般是一个指针, 指向你自己定义的数据结构的地址(逻辑地址),
Copy Paste 可能位于不同的进程中, 而同一物理地址, 在不同进程中逻辑地址是不同的
另外, Copy Paste还存在数据所占内存的分配和释放问题
由于ListView并不知道你的数据的结构, 所以其提供的Copy Paste就只能对字符串进行操作, 不会包括你的数据

要实现你的功能, 必须你自己处理Clipboard
主要使用以下API
OpenClipboard
RegisterClipboardFormat
EmptyClipboard
SetClipboardData
CloseClipboard
IsClipboardFormatAvailable
GetClipboardData
GlobalAlloc
GlobalLock
GlobalUnlock
ThankSZ 2006-10-27
  • 打赏
  • 举报
回复
呵呵 这个比较复杂 如果删除的话 还比较好处理 直接用Listvieew.itmesIndex来判断 删除数据库中后再更新Listview 也就是重新加载的过程
kye_jufei 2006-09-16
  • 打赏
  • 举报
回复
To liangqingzhi():
Clipbrd?
不曾用過?可否詳細一些?
MSN:kye_jufei@hotmail.com
老之 2006-09-16
  • 打赏
  • 举报
回复
使用剪切板来复制:
uses Clipbrd;

Clipboard.AsText:=StrKye;

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧