TreeView节点拖拉操作

//这个拖拽的感觉不对

unit Unit1;

interface

uses
  Windows, Messages, SysUtils,
Classes, Graphics, Controls, Forms,
Dialogs,
  ComCtrls;

type
  TForm1 = class(TForm)
    TreeView1:
TTreeView;
    procedure TreeView1MouseDown(Sender: TObject;
Button: TMouseButton;
      Shift: TShiftState;
X, Y: Integer);
    procedure TreeView1DragOver(Sender, Source: TObject;
X, Y: Integer;
      State: TDragState; var Accept:
Boolean);
    procedure
TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R
*.DFM}

{鼠标左键按下,准备开始拖拉操作}
procedure TForm1.TreeView1MouseDown(Sender: TObject;
Button: TMouseButton;
  Shift: TShiftState; X, Y:
Integer);
begin
  if ( Button = mbLeft )
and
     (
htOnItem in Treeview1.GetHitTestInfoAt( X, Y )
) then
  begin
    Treeview1.BeginDrag(
False );
  end;
end;

{鼠标拖拉操作}
procedure
TForm1.TreeView1DragOver(Sender,
Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
var
  Node : TTreeNode;
begin
  if Source = Treeview1
then
  begin
    Node := Treeview1.GetNodeAt( X, Y
);
    if Node <> nil then
      Accept
:= true;
  end;
end;

{拖拉放下}
procedure
TForm1.TreeView1DragDrop(Sender,
Source: TObject; X, Y: Integer);
var
  TempNode :
TTreeNode;
  AttachMode : TNodeAttachMode;
begin
  if Treeview1.Selected =
nil then
    Exit;
  AttachMode
:=
naAddChild;
  Treeview1.Items.BeginUpdate;
  try
    TempNode := Treeview1.Items.AddChild( Treeview1.DropTarget,‘Temp‘ );
    try
      Treeview1.Selected.MoveTo(
Treeview1.DropTarget, AttachMode );
    finally
      TempNode.Free;
    end;
  finally
    Treeview1.Items.EndUpdate;
  end;
end;

end.

来自为知笔记(Wiz)

附件列表

TreeView节点拖拉操作,布布扣,bubuko.com

时间: 2024-12-20 11:17:40

TreeView节点拖拉操作的相关文章

TreeView节点拖拉操作1

TreeView节点拖拉操作1 //事先设置 TreeView1.DragMode= dmAutomatic; unit Unit1; interface uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,   Dialogs, ComCtrls; type   TForm1 = class(TForm)     TreeView1: TTreeView;     procedure 

WPF如何实现TreeView节点重命名

我们经常看到一些软件比如酷狗音乐,在对列表右键进行重命名的时候,当前列表会泛白并且进入可编辑状态,当我们更改完成后就会并进入非编辑状态,这些具体是怎么实现的呢?下面的方法也许会提供一些思路,下面的TreeView节点是通过数据双向绑定的方式,绑定到TextBlock控件和TextBox控件的Text属性上,并且让两者绑定相同的属性,同时使TextBox控件刚好完全覆盖TextBlock控件, 由于TextBlock控件和TextBox控件的区别,TextBlock控件无法实现编辑,所以我在Tex

WPF 之 TreeView节点重命名

下面的TreeView节点是通过数据双向绑定的方式,绑定到TextBlock控件和TextBox控件的Text属性上,并且让两者绑定相同的属性,同时使TextBox控件刚好完全覆盖TextBlock控件, 由于TextBlock控件和TextBox控件的区别,TextBlock控件无法实现编辑,所以我在TextBlock控件的上面覆盖了一个TextBox控件,初始状态下我们设置TextBox的Visibility属性为Collapsed,当我们点击重命名的时候,我们再设置TextBox的Visi

TreeView节点

TreeView由节点构成,建树通过对TreeView.items属性进行操作.Items是一个TTreeNodes对象,这是一个TTreeNode集. 一.针对TTreeNodes,也就是 TreeView.Items,有这些属性: 1.count,节点个数.(节点总数) 2.item[index] ,通过index得到节点.(节点号) 二.针对TTreeNodes,也就是 TreeView.Items,常用的添加节点的操作有: AddFirst添加第一个根节点.由此函数添加的节点总排在前面,

动态载入TreeView时让TreeView节点前显示加号

解释下标题,我这里通过webservice获取数据并动态载入TreeView节点.那么某个节点展开前它是没有子节点的.那么它就不显示加号.这样会让用户误以为此节点不能展开.我是这样做的,每次创建节点a时,默觉得它创建一个子节点b(随便给个名字即可,如果为"呵呵"),那么创建的节点a就有了子节点b,也就会显示加号了,等展开节点a时,再把刚才默认创建的子节点b移除就能够了,删除方法是先推断展开的节点a是否有一个子节点而且名字为"呵呵".如果为真则删掉. 当然这样做导致有

openstack中彻底删除计算节点的操作记录

在使用openstack的过程中,我们经常会添加好几台计算节点来部署虚拟机,在后续使用中由于某些原因,一些计算节点出现了问题,需要将这些出了问题的计算节点从openstack的控制节点中踢出去!但是很多时候,在删除计算节点的时候由于删除不彻底而导致了后面使用openstack出现了诸多问题. 下面记录了在openstack中彻底删除计算节点linux-node2.openstack的操作: 在控制节点上操作 查看计算节点 [[email protected] src]# openstack ho

js中对节点属性的操作和对节点的操作

常用的节点属性操作方法 1.setAttribute(name,value):给某个节点添加一个属性 2.getAttribute(name):获取某个节点属性的值. 3.removeAttribute(name):删除某个节点的属性. 例: window.onload = function(){        //查找body节点        var node_body = document.body;        //alert(node_body);        //查找img节点 

kendo ui的treeView节点点击事件修改和grid的配置的一点总结

kendo-ui的treeView节点(node)点击时  可以触发一个select的事件(event),并且连续点击多次相同节点,可以触发并且只能触发一次该事件. 可是需求上需要实现:每次点击相同的节点,都要触发该select事件. 这个需求,是和kendo的select事件相悖的. 最开始想通过 外部手动触发select事件,但是发现并不能做到. 后来做了如下配置: $("#treeview").kendoTreeView({ dataSource: [ treeData ], s

dom节点的操作

dom节点的操作 -- jQuery 内部插入 1.(结尾)append 方法 . appendto方法(为了方便链式操作) (开头)prepend方法 $('#div1').append($('#div2'));     //将div2 插入到 div1 里面的末尾 ? $('#div1').appendto($('#div2'));     //将div1 插入到 div2 里面的末尾 ? $('#div1').prepend($('#div2'));     //将div2 插入到 div