ListView - drag n drop multiple items within a TListView

Top  Previous  Next

// drag & drop multiple items within a TListView

 

{ ListView1.DragMode := dmAutomatic } 

 

procedure TForm1.ListView1DragDrop(Sender, Source: TObject; X, Y: Integer); 

var 

  DragItem, DropItem, CurrentItem, NextItem: TListItem; 

begin 

  if Sender = Source then 

    with TListView(Sender) do 

    begin 

      DropItem    := GetItemAt(X, Y); 

      CurrentItem := Selected; 

      while CurrentItem <> nil do 

      begin 

        NextItem := GetNextItem(CurrentItem, SdAll, [IsSelected]); 

        if DropItem = nil then DragItem := Items.Add 

        else 

          DragItem := Items.Insert(DropItem.Index); 

        DragItem.Assign(CurrentItem); 

        CurrentItem.Free; 

        CurrentItem := NextItem; 

      end

    end

end

 

procedure TForm1.ListView1DragOver(Sender, Source: TObject; X, Y: Integer; 

  State: TDragState; 

  var Accept: Boolean); 

begin 

  Accept := Sender = ListView1; 

end