TreeView与ListView之间及自身的拖拽操作

来源:互联网 发布:上海投行工资 知乎 编辑:程序博客网 时间:2024/05/16 14:02

首先将TreeView及ListView的DragMode属性设为:dmAutomatic;其后代码如下:

 procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  Accept := False;
  if (source is TTreeView) or (source is TListView) then
    Accept := True;
end;

procedure TForm1.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
  tSrcNode, tDesNode: TTreeNode;
begin
  tDesNode := TTreeView(Sender).GetNodeAt(X, Y);
  if Source is TTreeView then
  begin
    tSrcNode := TTreeView(Sender).Selected;
    tSrcNode.MoveTo(tDesNode, naAddChild);
  end;

  if Source is TListView then
  begin
    TreeView1.Items.AddChild(tDesNode, ListView1.Selected.Caption);
    ListView1.Selected.Delete;
    self.TreeView1.FullExpand;
  end;
end;

procedure TForm1.ListView1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  Accept := False;
  if (source is TTreeView) then
    Accept := True;
end;

procedure TForm1.ListView1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
  LvItem: TListItem;
  SNode: TTreeNode;
begin
  If (Source = TreeView1) then
  begin
    SNode := self.TreeView1.Selected;
    LvItem := ListView1.Items.Add;
    LvItem.Caption := SNode.Text;
    SNode.DeleteChildren;
    SNode.Delete;
  end;
end;

原创粉丝点击