트리뷰 2개를 써서 노드의 이동을 자유롭게 하려고 합니다.
트리뷰A내에서는 물론, 트리뷰 A와 B간의 이동도 가능하게 하려 합니다.
다음과 같이 코딩을 했더니 이동은 가능한데 서브아이템이 없어져 버리네요.
고수님들의 가르침 부탁합니다.
procedure TForm1.TreeViewsDragDrop(Sender, Source: TObject; X, Y: Integer);
var
AnItem: TTreeNode;
SourceTree, TargetTree: TTreeView;
begin
SourceTree := Source as TTreeView;
TargetTree := Sender as TTreeView;
if SourceTree.Selected = nil then Exit;
AnItem := TargetTree.GetNodeAt(X,Y);
TargetTree.Items.AddChild(AnItem, SourceTree.Selected.Text);
SourceTree.Items.Delete(SourceTree.Selected);
end;
이동을 하실려면 TTreeNode.MoveTo를 참조하시면 되지 않을까 합니다.
소스를 적어 드리면 좋겠지만, 저도 초보라 시간이 너무 걸릴 것 같네요...-_-;;
대충 적어보면
SourceTree.Selected.MoveTo(AnItem, naAddChild);
쯤 되지 않을까 하네요. 테스트는 안해 봤어요.
성공을 빌며...
궁금녀 wrote:
> 트리뷰 2개를 써서 노드의 이동을 자유롭게 하려고 합니다.
> 트리뷰A내에서는 물론, 트리뷰 A와 B간의 이동도 가능하게 하려 합니다.
> 다음과 같이 코딩을 했더니 이동은 가능한데 서브아이템이 없어져 버리네요.
> 고수님들의 가르침 부탁합니다.
>
> procedure TForm1.TreeViewsDragDrop(Sender, Source: TObject; X, Y: Integer);
> var
> AnItem: TTreeNode;
> SourceTree, TargetTree: TTreeView;
> begin
> SourceTree := Source as TTreeView;
> TargetTree := Sender as TTreeView;
>
> if SourceTree.Selected = nil then Exit;
> AnItem := TargetTree.GetNodeAt(X,Y);
>
> TargetTree.Items.AddChild(AnItem, SourceTree.Selected.Text);
> SourceTree.Items.Delete(SourceTree.Selected);
> end;