ListView1 是列表模式(ViewStyle = vsReport),行选模式(RowSelect = True)的,
在拖放 listview1 的某一行时,会有由 Item 的内容产生的一长串虚影,导致拖动速度非常慢,也不雅观,于是便
procedure TMainForm.ListView1StartDrag(Sender: TObject;
  var DragObject: TDragObject);
begin
  try
    DragObject := TDragObject.Create;
  except
  end;
end;
这样可以把虚影消除掉,
但这一来会又产生了两个问题:
1、拖放的 Source 不再是 = ListView1 了,而是 is TDragObject 了;
2、更惨的是,当我们再去拖放其他控件(譬如 TreeView1 )的内容时,那一长串虚影又串了出来,大煞风景:(而且不能再用上面的过程,否则这个拖放的 Source 也是 TDragObject 了,那怎么判断?请大家帮帮忙,我已经在网上找了很久,csdn、大富翁、google等都翻遍了,msdn也看了一下(e文不易看啊),都没有答案,也有人提过这个问题,但都是没有结贴的。:(最好能够控制虚影的内容(因为...你明白啦);
比较好是把虚影消除掉,而且不要改变 Source。
Foxmail 等软件就可以这样的。好辛苦啊,头大了很久了。。
大侠,看你靠你了。

解决方案 »

  1.   

    拖放的Source不再是ListView1有什么关系?
    你应该是在拖放时想拖放ListView的一条吧?
    你可以自定义一个TDragObject,在里面定义一个变量
    当StartDrag时象你上面那样创建自定义的DragObject,
    然后把当前的选中ListItem赋值给DragObject的变量在以前判断Source的地方判断DragObject不也一样可以实现Drag操作的吗?
      

  2.   

    如果自己控制虚影的问题,我可一下说不清楚,
    不过你可以去看看VirtualTrees,里面有这方面的代码
    或者你可以直接就用VirtualTrees,速度快极了,控制也多了,也好看了
      

  3.   

    用下面代码试试;treeview1.items.beginupdate;
    tryexcept
    end;treeview1.items.endupdate;