怎样实现TTreeView中项目的拖放功能,就像Windows资源管理器一样的拖放目录(100分)

  • 主题发起人 主题发起人 chenby
  • 开始时间 开始时间
C

chenby

Unregistered / Unconfirmed
GUEST, unregistred user!
怎样实现TTreeView中项目的拖放功能,就像Windows资源管理器一样的拖放目录
 
Delphi/Delphi4/Demos/Virtual Listview
 
顺便告诉我一下
 
有例子。

E:/Program Files/Borland/Delphi5/Demos/Virtual Listview/virtuallistview.dpr
 
又上老猫强了先,
嗨!命不好。
 
uses ShellApi;

procedure TForm1.FormCreate(Sender: TObject);
begin
{Let Windows know we accept dropped files}
DragAcceptFiles(Form1.Handle, True);
end;

procedure TForm1.WMDROPFILES(var Message: TWMDROPFILES);
var
NumFiles : longint;
i : longint;
buffer : array[0..255] of char;
begin
{How many files are being dropped}
NumFiles := DragQueryFile(Message.Drop,
-1,
nil,
0);
{Accept the dropped files}
for i := 0 to (NumFiles - 1) do begin
DragQueryFile(Message.Drop,
i,
@buffer,
sizeof(buffer));
Form1.Memo1.Lines.Add(buffer);
end;
end;

end.
 
OnDragDrop事件:
var
DesNode,SourceNode : TTreeNode;
i : integer;
begin
if TreeView1.Selected = nil then Exit;
DesNode :=TreeView1.GetNodeAt( X, Y );
if DesNode = TreeView1.Selected then exit;

if Source is TTreeView then
if DesNode = nil then
exit
else
MoveToNode(DesNode,TreeView1.Selected);

TreeView1.selected := DesNode;
end;

procedure MoveToNode(DesNode,SourceNode : TTreeNode);
var
Path,desPath: string;
begin
if frmMain.tvwMaildir.items[0]=DesNode then
exit;
MoveFile(pchar(Path),pchar(desPath));
SourceNode.MoveTo(DesNode,naAddChild);
end;
 
本人昨晚上已经从一本书上看到了解决的办法
且已可用。
不过还是谢谢各位的答案,
尤其代码比较多的。
 
本人又有新问题了,
虽然可拖放插入, 但是TreeView有了滚动条之后,
不能像资源管理器一样自动往上或往下滚动。
谁解决了谁得高分。
 
多人接受答案了。
 
后退
顶部