Консультация № 159600
04.02.2009, 13:52
0.00 руб.
0 6 2
Здравствуйте уважаемые эксперты. Есть стандартная компонента TreeView. Я ее использую для создания плана (структуры) документа, например, большого доклада и генерации, на его основе, содержания. Я могу разворачивать, сворачивать дерево, добавлять и переименовывать узлы и т.д. Но при добавлении узел показывается внизу. Как вставлять узел между узлами, как изменять следование узлов в дереве и возможно ли изменять важность узла (переводить его на подуровень, либо, наоборот выше)? Возможно есть компоненты, более подходящие для этого? Заранее извините за, наверное, элементарный вопрос.

Обсуждение

Неизвестный
04.02.2009, 15:21
общий
04.02.2009, 20:26
это ответ
Здравствуйте, Oleg Adamenko!

Для добавления узла в любое место необходимо указать его родителя - другой узел , свойство parent? если не ошибаюсь - пишу на память. Либо используя функцию родителя которая вернет ссылку на созданный узел который следует заполнять значиниями (caption). Перемещать же узел возможно создав новый в нужном месте и удалив старый узел.
Неизвестный
04.02.2009, 17:20
общий
Перемещать не пробовал. Я добавлял новый узел к выделеному. Указав его в качестве родителя.
Неизвестный
04.02.2009, 18:21
общий
[04.02.2009, 17:20]
Перемещать не пробовал. Я добавлял новый узел к выделеному. Указав его в качестве родителя.
-------
monah, Практикант

Но при этом узел выводится ниже всех узлов. А если добавлять подчиненный узел, он будет добавлен под выделенным узлом, но первым
Мне же надо свободно изменять порядок следования узлов при выводе их. Я пытаюсь с помощью этого компонента сформировать структуру (содержание) документа. Может, есть другие компоненты для этого?
Неизвестный
05.02.2009, 01:02
общий
А что Insert/InsertNode не работает? Там же вроде как раз перед каким вставлять можно указать - вот вам и "любое место".

А вообще каждый узел в дереве это объект и объекты по дереву можно перемещать - обратите внимание на метод MoveTo для отдельно взятого узла.
давно
Профессионал
153662
1070
05.02.2009, 09:49
общий
это ответ
Здравствуйте, Oleg Adamenko!
Возможность перетаскивания в компоненте TreeView можно при помощи такого кода:
Свойство Dragmode компонента TreeView нужно поставить в dmAutomatic.

Приложение:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;

type
TForm1 = class(TForm)
TreeView1: TTreeView;
procedure TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);
procedure TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
private
{ Private declarations }
procedure MoveNode(TargetNode, SourceNode: TTreeNode);
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

//
// Процедура, которая переместит узел и его подузлы
//

procedure TForm1.MoveNode(TargetNode, SourceNode: TTreeNode);
var
nodeTmp: TTreeNode;
i: Integer;
begin
with TreeView1 do
begin
nodeTmp := Items.AddChild(TargetNode, SourceNode.Text);
for i := 0 to SourceNode.Count - 1 do
begin
MoveNode(nodeTmp, SourceNode.Item[i]);
end;
end;
end;

procedure TForm1.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
TargetNode, SourceNode: TTreeNode;
begin
with TreeView1 do
begin
TargetNode := GetNodeAt(X, Y); // получаем целевой узел
SourceNode := Selected;
if (TargetNode = nil) then
begin
EndDrag(False);
Exit;
end;
MoveNode(TargetNode, SourceNode);
SourceNode.Free;
end;
end;

procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
if (Sender = TreeView1) then // если верно принимаем перетаскиваемый пункт
begin
Accept := True;
end;
end;

end.
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

давно
Профессионал
153662
1070
05.02.2009, 20:12
общий
Вот URL >>ссылка на архив с этой программой, у меня всё работает.
Проверте
Свойство Dragmode компонента TreeView нужно поставить в dmAutomatic.
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

Форма ответа