我想实现拖动一item到treeview的某个node上。
解决方案 »
- 类方法集成的一个问题,override是否可有可无
- 关于"父子窗口"的问题
- 请问断点续传的原理是什么意思?
- 年终放分
- BCB那边的小弟过来求救:急急急:存储过程中两个select的字段取值问题,在线急等!!!
- 如何取消报表中关于时间的'0:00:00'的字符!!!!
- 爱看电影的朋友有福了。
- 有奖捉虫!!!!!!!!!!!!!!!!!!!!!!!
- 我尝试使用Delphi6中的ActionMainMenuBar控件,但在运行期间ActionMainMenuBar上的菜单项却看不见
- 高分,高人来得,请问delphi如何调用oracle的存储过程,并返回视图。
- 请教高手,如何用dbgrid急。。。。。。。。。。。。。。。
- [秋後結賬] 現有幾十個做好了的專案,如何組合到一起來執行.
主要解答者: sysu 提交人: song317
感谢: Eastunfail、cg1120、BlueTrees、sysu
审核者: findcsdn 社区对应贴子: 查看
A : 现在如果添加一个Node以后自动的放在最下面,要是想可以拖到上面的位置,
其他的Node顺延,如何实现呢?
---------------------------------------------------------------
要在TREEVIEW的DATA里写一个用于排序的数值,拖放时按数值排列
---------------------------------------------------------------
不用Delete和Add,用MoveTo即可。
设置属性TreeView1.DragMode := dmAutomatic;
在TreeView1的OnDragOver和OnDragDrop事件中:
procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Accept := True;
end;
procedure TForm1.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
srcNode, destNode: TTreeNode;
begin
if (Source = TreeView1) then
with TreeView1 do begin
srcNode := Selected;
destNode := GetNodeAt(X, Y);
if srcNode.Parent = destNode.Parent then // 若是同一级则移动
srcNode.MoveTo(destNode, naInsert);
end;
end;
State: TDragState; var Accept: Boolean);
begin
Accept:=true;
end;procedure TForm1.ListBox1EndDrag(Sender, Target: TObject; X, Y: Integer);
begin
if assigned(target) and assigned((target as TTreeView).GetNodeAt(X, Y)) then
ShowMessage((target as TTreeView).GetNodeAt(X, Y).Text);
end;