加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Delphi ListView拖放整行

发布时间:2020-12-15 09:45:47 所属栏目:大数据 来源:网络整理
导读:我对Delphi中用于ListView的拖放系统很陌生.我在互联网上找到了一个简单的解决方案,可以在ListView中拖放项目.问题是代码只显示拖动第一列,我想显示并拖动整行. 您可以在下面的图片中查看我得到的以及我想要得到的内容. procedure TForm1.ListView1DragDrop(
我对Delphi中用于ListView的拖放系统很陌生.我在互联网上找到了一个简单的解决方案,可以在ListView中拖放项目.问题是代码只显示拖动第一列,我想显示并拖动整行.

您可以在下面的图片中查看我得到的以及我想要得到的内容.

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,Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  Accept := Sender = ListView1;
end;

self.ListView1.DragMode := dmAutomatic;

解决方法

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

// 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您可以找出项目坐标并将其从屏幕截图复制到新的位图中.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读