TTreeView的两个事件OnDragDrop、OnDragOver 实现自动拖放功能


本文整理自网络,侵删。

 unit Unit1;

interface

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

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

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
//TStream是个抽象类
//子类有TFileStream (for working with files)
{ TODO :
TStringStream (for manipulating in-memory strings)
TMemoryStream (for working with a memory buffer)
TBlobStream (for working with BLOB fields)
TWinSocketStream (for reading and writing over a socket connection)
TOleStream (for using a COM interface to read and write)
}
Stream: TStream;
begin
//TMemoryStream is a stream that stores its data in dynamic memory
Stream := TMemoryStream.Create;
with TStringList.Create do
begin
Add('一连长');
Add(' 一排长');
Add(' 一班长');
Add(' 战士1');
Add(' 战士2');
Add(' 战士3');
Add(' 战士4');
Add(' 二班长');
Add(' 三班长');
Add(' 二排长');
Add(' 三排长');
Add('二连长');
Add('三连长');
Add('www.delphitop.com');
SaveToStream(Stream);
end;
Stream.Position := 0;
TreeView1.LoadFromStream(Stream);
Stream.Free;
//允许自动拖放
TreeView1.DragMode := dmAutomatic;
end;

//只可以拖动叶子节点
procedure TForm1.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
OldNode,NewNode: TTreeNode;
begin
if Sender = Source then
begin
//源
OldNode := TTreeView(Sender).Selected;
//目标
NewNode := TTreeView(Sender).DropTarget;

//TreeView1.Items.Add(NewNode, OldNode.Text);
//目标前插入
TreeView1.Items.Insert(NewNode, OldNode.Text);
//删除源
OldNode.Delete;
end;
end;

procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Accept := not TTreeView(Source).Selected.HasChildren;
end;

end.

相关阅读 >>

Delphi调节图片亮度、色彩和饱和度的代码

Delphi 中的颜色常量及效果图

Delphi fmx 把内容复制到粘贴板上支持跨平台

Delphi中frame和form有何区别

Delphi中的sender:tobject对象解析

Delphi 通过api 隐藏任务栏所有托盘图标

Delphi 在桌面中嵌入窗体

Delphi 通过 shgetspecialfolderlocation、shgetpathfromidlist 函数获取常用路径

Delphi中tframe组件的使用

Delphi截图程序无窗口版

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...