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;