【问题标题】:Delphi ListView Drag Drop Entire RowDelphi ListView 拖放整行
【发布时间】:2015-12-29 11:34:00
【问题描述】:

我对 Delphi 中用于 ListView 的拖放系统非常陌生。我在互联网上找到了一个简单的解决方案,可以在 ListView 中拖放项目。问题是代码只显示拖动第一列,我想显示并拖动整行。

您可以在下图中查看我得到了什么以及我想要得到什么。

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;

【问题讨论】:

标签: delphi listview drag-and-drop listitem


【解决方案1】:

我不知道你是如何得到选中当前行的快照的,但是它的拖放部分是这样的:

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

您可以创建位图并在其中手动绘制项目。

或者这里是如何制作整个列表视图(或任何其他组件)的屏幕截图: http://delphidabbler.com/tips/24 您可以计算出项目坐标并将其从屏幕截图复制到新的位图中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-14
    • 1970-01-01
    • 1970-01-01
    • 2011-09-26
    • 2012-11-24
    • 1970-01-01
    相关资源
    最近更新 更多