2015-12-29 16 views
5

Ich bin ziemlich neu zu dem Ziehen und Löschen System in Delphi für ListView. Ich habe eine einfache Lösung im Internet gefunden, um Elemente in ListView zu ziehen und zu löschen. Das Problem ist, dass der Code nur das Ziehen der ersten Spalte zeigt und ich möchte anzeigen und die gesamte Zeile ziehen.Delphi ListView Drag-Drop ganze Reihe

Sie können auf dem folgenden Bild sehen, was ich bekomme und was ich bekommen möchte.

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/de/Customizing_Drag_and_Drop_with_a_Drag_Object –

Antwort

0

Ich weiß nicht, wie Sie einen Schnappschuss von ausgewählten aktuellen Zeile, aber der Drag & Drop-Teil davon ist, wie folgt aus:

// 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; 

Sie können ein erstellen Bitmap und zeichnen Sie das Element manuell darin.

Oder hier ist wie Sie einen Screenshot der gesamten Listenansicht zu machen (oder jede andere Komponente): http://delphidabbler.com/tips/24 Sie können die Artikel Koordinaten herauszufinden, und kopieren Sie sie aus dem Screenshot in eine neue Bitmap.

Verwandte Themen