CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

如何实现listview的拖动功能?

楼主awaitpram(期待)2002-03-04 17:28:31 在 Delphi / VCL组件开发及应用 提问

我想做一个类似于windows 浏览器的东西。要实现像浏览器里拖动文件的功能(从一个目录考贝到另一个目录,是在同一个listview)。  
  但我发现那个listview   ondragover事件里有两个参数“Sender,   Source:   TObject”。  
  看它参数好像实现的是在两个控件这间的。  
  但要实现像我这样在一个控件的功能要怎么做呢?请高手多多关注,谢谢。  
  问题点数:100、回复次数:6Top

1 楼lixif(今生再添一业)回复于 2002-03-04 17:52:29 得分 0

你到www.netgocn.com去下载软件看看,那个软件所做的效果是否就是你想要的(它是100%的Delphi写成)?如果是的话,可以给我来信,我能来这里的时间不多。Top

2 楼eagleldj(亚洲飞鹰)回复于 2002-03-06 12:38:22 得分 100

在FORM1上放一个ListView1,建立几个Items,一个ImageList1,ImageList1里面放几个图标~~  
  设置ListView1.LargeImages   :=ImageList1;  
   
  procedure   TForm1.ListView1DragOver(Sender,   Source:   TObject;   X,   Y:   Integer;  
      State:   TDragState;   var   Accept:   Boolean);  
  begin  
      accept:=Source   is   TlistView;  
  end;  
   
  procedure   TForm1.ListView1DragDrop(Sender,   Source:   TObject;   X,   Y:   Integer);  
  var  
      PosPoint:TPoint;  
  begin  
      PosPoint.x:=X-16;  
      PosPoint.y:=Y-16;  
      (Source   As   TListView).Selected.SetPosition(PosPoint);  
  end;  
   
  procedure   TForm1.ListView1MouseDown(Sender:   TObject;   Button:   TMouseButton;  
      Shift:   TShiftState;   X,   Y:   Integer);  
  begin  
  if   button=mbleft   then  
      begin  
          with   sender   as   TListview   do  
          begin  
              if   GetItemAt(x,y)<>nil   then  
                  begindrag(false);  
          end;  
      end;  
  end;  
   
  可以拖动一个Item。  
  至于多个Item的拖动我也还在识。  
   
  Top

3 楼eagleldj(亚洲飞鹰)回复于 2002-03-06 13:00:56 得分 0

哈哈,搞定  
   
  sx,sy:   integer;  
   
  procedure   TForm1.ListView1DragOver(Sender,   Source:   TObject;   X,   Y:   Integer;  
      State:   TDragState;   var   Accept:   Boolean);  
  begin  
      accept:=Source   is   TlistView;  
  end;  
   
  procedure   TForm1.ListView1DragDrop(Sender,   Source:   TObject;   X,   Y:   Integer);  
  var  
      i:integer;  
      PosPoint:Tpoint;  
  begin  
      sx:=sx-x;  
      sy:=sy-Y;  
      with   sender   as   TListview   do  
      for   i:=0   to   Items.Count-1   do  
          if   Items[i].Selected   then  
          begin  
              PosPoint.x:=Items[i].Left   -   sx;  
              PosPoint.y:=Items[i].Top   -   sy;  
              Items[i].SetPosition(PosPoint);  
          end;  
          Refresh;  
  end;  
   
  procedure   TForm1.ListView1MouseDown(Sender:   TObject;   Button:   TMouseButton;  
      Shift:   TShiftState;   X,   Y:   Integer);  
  begin  
      if   button=mbleft   then  
          with   sender   as   TListview   do  
            if   GetItemAt(x,y)<>nil   then   begindrag(false);  
      sx:=x;     sy:=y;  
  end;Top

4 楼awaitpram(期待)回复于 2002-03-08 17:07:23 得分 0

真的非常非常感谢你。  
  虽然你没有直接的解决了我的问题(可能是你还没有理解清楚我的意图吧),我要的是类似把文件考进目录用拖动来完成的。而你给我的代码是关于如何把一个文件放到其它地方去。  
   
  不过在你的代码给了我很大的启示。使我能顺利的完成任务。你要是想我的代码的话可以给我mail。我的mail:awaitlq@163.net,希望我们能够经常交流一起成长。再次感谢你。Top

5 楼awaitpram(期待)回复于 2002-03-08 17:15:56 得分 0

100分全部给你:)Top

6 楼lixif(今生再添一业)回复于 2002-03-09 21:57:12 得分 0

可惜!Top

相关问题

  • 如何在listview中实现拖动,各位大虾救命
  • 请问如何实现ShellListView 和ListView之间的拖动效果?
  • 请问如何实现一个图形的拖动功能
  • ListView条目拖动
  • 如何在ListView中实现拖动?并且如何保存它们的位置?
  • 一百五十分!!!从DBGrid拖动项目到ListView/TreeView,能否实现?
  • 如何实现从LISTVIEW中一次拖动多个ITEM到TREEVIEW中来???(内空)
  • 关于listview控件内实现多个选项(图标)拖动的问题?
  • 关于listview控件内实现多个选项(图标)拖动的问题?
  • 如何实现ViewStyle为vsReport的ListView鼠标拖动改变行排列顺序

关键词

  • .net
  • 代码
  • 文件
  • source
  • pospoint
  • 拖动
  • listview
  • sx
  • tobject
  • sender

得分解答快速导航

  • 帖主:awaitpram
  • eagleldj

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo