拖动时的光标问题... 100分(100分)

  • 主题发起人 主题发起人 cAkk
  • 开始时间 开始时间
C

cAkk

Unregistered / Unconfirmed
GUEST, unregistred user!
使用"资源管理器"时我们可以注意到,拖动一个文件时,dragcursor是这个
文件名字+图标混合的一个图形,而且是半透明的, 拖动多个文件时就成了
这多个文件的图形, 请问怎样实现?
 
我也想知道.
 
其实这根本就不是cursor,而是由自己编程处理在ondragmove中实时的在当前
鼠标位置创建一个透明的label。
我也记不太清,不过以前有本<<VB5从入门到精通>>的书中有这样的例子。
我可以帮你再查查。
 
只不过是listview的特性而已。当然可以编程实现,但没做过。
想自己做的话,需重载getdragimage虚拟方法,看一下listview的源码吧,不是太多。
 
to menxin: getdragimage怎么用?
 
cakk:你去看一下listview.paint方法,好象是在那里,因为没做过,所以不敢说,但看过源码,好象不是很难。有时间看一下吧。
 
有一个叫dragdrop的控件组能解决诸位的燃眉之急。试一试。
 
看看TImageList就明白了,但是要注意一点,注意在你用ImageList显示完光标后,
要调用ShowCursor来将真正的鼠标藏起来,否则屏幕上就会出现两个光标。
 
to George: 怎样用timagelist显示那个图形?
 
为什么不用DFS的ExtListView或EnhListView,你不用写任何代码。它还支持:
点击标题栏双向排序;
在每一个子项中显示图标;
以不同的颜色或字体显示每一个标题和子项;
....
 
to barton: 尽量还是少用3rd控件, 除非有特殊需要.
像你说的排序,显示子图标等功能,实现起来很简单,所以没有必要用别的控件.
不过像拖动图标这样的问题,也许可以考虑试用. 不过我还是想知道实现原理.


你说的这个控件哪里下载?
 
我找到实现方法了!今天在网上下在了一个控件,里面有我需要的功能,我看了看
代码,基本原理如下:

1.当开始drag时, 定义一个临时imagelist:
tmpImageList := TImageList.Create(self);

2.用下面代码设置它为listview的Dragimage:
with Listview1 do
tmpImageList.handle := ListView_CreateDragImage(Handle,Selected.index,dummyPt);

3.需要显示图片时(即dragover时)
ImageList_BeginDrag(tmpImageList.handle,
ImageIndex, mousePos.X, mousePos.Y)

大概原理如此,这个控件可能就是hblinux说的那个.

其实还有更简单的, 将listview的DragMode设为dmAutomatic,一切搞定!

发饷吧!
 
我真糊涂! 这个问题是我自己提出来的,可笑我一直还在等着拿分!!! :-)
 
后退
顶部