2015-12-29 21 views
5

ListView için Delphi'deki Sürükleme ve Damlama Sisteminde oldukça yeniyim. ListView'de öğeleri sürükleyip bırakmak için internette basit bir çözüm buldum. Sorun, kodun yalnızca ilk sütunu sürüklediğini göstermesi ve göstergesini göstermesi ve tüm satırı sürüklemesidir.Delphi ListView Sürükle Bırak Tüm Satır

Aşağıdaki resimde gördüğüm şeyi ve almak istediklerimi görebilirsiniz.

Dragging and Dropping in Delphi

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; 

self.ListView1.DragMode := dmAutomatic; 
+1

http://docwiki.embarcadero.com/RADStudio/Seattle/en/Customizing_Drag_and_Drop_with_a_Drag_Object –

cevap

0

seçilen geçerli satırın anlık görüntüsünü almak nasıl bilmiyorum, ama bunun sürükle-bırak kısmı şu şekildedir:

// you need a TDragControlObject: 
    TPlainDragControlObject = class(TDragControlObject) 
    protected 
    function GetDragImages: TDragImageList; override; 
    End; 
..... 

Implementation 

function TPlainDragControlObject.GetDragImages: TDragImageList; 
var 
    images : TDragImageList; 
begin 
    images := TDragImageList.create(self); 
    // ToDo: add images - how the drag object will look like 

    Result := images; // you can return Nil here if you want just the drag cursor with no image at all 
end; 

procedure TMainForm.lvStartDrag(Sender: TObject; 
    var DragObject: TDragObject); 
begin 
    If Sender = ListView1 Then Begin 
    DragObject := TPlainDragControlObject.Create(Sender as TListView); 
    End; 
end; 

Bir oluşturabilir bitmap ve öğeyi elle çizin. http://delphidabbler.com/tips/24 Öğe koordinatları anlamaya ve yeni bir bitmap içine ekran kopyalayabilirsiniz: Burada

Veya tüm liste görünümünde bir ekran (veya başka bir bileşen) yapmak nasıl.