TreeView如何自动向下滚动?(100分)

  • 主题发起人 主题发起人 LukeWang
  • 开始时间 开始时间
L

LukeWang

Unregistered / Unconfirmed
GUEST, unregistred user!
在TreeView的TreeNode间拖放.
当需要拖放到不在当前屏幕显示的节点时,发现TreeView
不会自动向下滚动?
请问如何实现TreeView自动向下翻页?
 
好像默认得属性就可以呀?!
或是我没明白问题。
 
默认是不会的
我的意思可以参考 windows资源管理器中树形目录结构
拖放一个文件到一个文件夹,当这个目标文件夹
不在显示的范围中时,这个目录树会自动向下或向上移动

我在Delphi中怎么实现阿这个功能啊
 
用sendmessage()消息函数
 
先将TREEVIEW的DRAGMODE设为自动,添加如下代码,下列过程虽然不十分严密,但大致可以完成你的要求

procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
var TVNODE:TTreeNode;
bdwidth:integer; //边界的宽度
begin
bdwidth:=10;
TVNODE:=TreeView1.GetNodeAt(X,Y);
if TVNODE<>nil then
if y>TreeView1.ClientRect.Bottom-bdwidth then
TreeView1.Selected:=TVNODE.GetNext;
if y<TreeView1.ClientRect.Top+bdwidth then
TreeView1.Selected:=TVNODE.GetPrev;
end;
 
多人接受答案了。
 
to menxin:
用TreeView1.Selected:=TVNODE.GetNext好像有一个问题,就是:
当需要在OnDragDrop中区分节点Selected和GetNodeAt(x,y)时,
当滚动条移动后,这句话会导致这两个节点实际上成为一个节点。
可以考虑改为:
if (NODE<>nil) then begin
if y>TreeView1.ClientRect.Bottom-bdWidth then
if (Node.GetNext)<>nil then
(NODE.GetNext).MakeVisible;
if y<TreeView1.ClientRect.Top+bdwidth then
if (Node.GetPrev)<>nil then
(NODE.GetPrev).MakeVisible;
end;
 
leepin你怎么和我想的一样 呵呵 可惜分数都给了menxin了
 
呵呵,我说了我只考虑了实现滚动,只是给你一些思路,你应该自己完善一下
 
后退
顶部