一个ListView,已加载10多个图标,现在需要随时用鼠标改变某个图标的位置,比如:用鼠标把第2个图标拖到第4个图标右侧并放下(这一功能已实现),问题是:怎样在鼠标释放按键时,判断当前插入的位置是第几个图标呢?拖动的代码如下:ListView 的DragMode已设成自动
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;
  PosPoint.y := Y;
  (Source as TListView).Selected.SetPosition(PosPoint);
end;以上代码可以实现拖动,但并不能实现图标拖动后判断插入的位置希望各位大侠能有好办法,谢谢

解决方案 »

  1.   

    itemindex不能判断吗ListView1.GetItemAt(x,y:integer)得到鼠标位置的item,然后取item的index就是你要放到的那个图标索引
      

  2.   

    procedure TForm1.ListView1DragDrop(Sender, Source: TObject; X, Y: Integer); 
    var 
      PosPoint: TPoint; 
      Item:TListItem;
    begin 
      PosPoint.x := x; 
      PosPoint.y := Y;
      Item :=  ListView1.GetItemAt(x,y);
      Item.Index就是目标图标的位置

      (Source as TListView).Selected.SetPosition(PosPoint); 
    end; 
      

  3.   

    var 
      PosPoint: TPoint; 
      Item:TListItem; 
    begin 
      PosPoint.x := x; 
      PosPoint.y := Y; 
      Item :=  ListView1.GetItemAt(x,y); 
      Item.Index就是目标图标的位置 
      (Source as TListView).Selected.SetPosition(PosPoint); 
    end;按以上代码测试,会出现致命错误,估计是Item.Index的问题,尚不知原因,继续测试中
      

  4.   

    问题解决了,主要是Accept := Source is TListView;  这句要改成  Accept := ListView1.GetItemAt(X, Y) <> nil;这样就能保证 GetItemAt 得到的Item不为Nil 。剩下的就好办了。
    谢谢大家,大家辛苦了。散分散贴了