復制代碼如下:
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);   

解决方案 »

  1.   

    使用剪切板来复制:
    uses Clipbrd;Clipboard.AsText:=StrKye;
      

  2.   

    To liangqingzhi():
      Clipbrd?
       不曾用過?可否詳細一些?
    MSN:[email protected]
      

  3.   

    呵呵 这个比较复杂 如果删除的话 还比较好处理 直接用Listvieew.itmesIndex来判断 删除数据库中后再更新Listview 也就是重新加载的过程
      

  4.   

    由于ListView的数据一般是一个指针, 指向你自己定义的数据结构的地址(逻辑地址), 
    Copy Paste 可能位于不同的进程中, 而同一物理地址, 在不同进程中逻辑地址是不同的
    另外, Copy Paste还存在数据所占内存的分配和释放问题
    由于ListView并不知道你的数据的结构, 所以其提供的Copy Paste就只能对字符串进行操作, 不会包括你的数据要实现你的功能, 必须你自己处理Clipboard
    主要使用以下API
    OpenClipboard 
    RegisterClipboardFormat
    EmptyClipboard
    SetClipboardData
    CloseClipboard
    IsClipboardFormatAvailable
    GetClipboardData
    GlobalAlloc
    GlobalLock
    GlobalUnlock