![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
проверить ветки в TreeView [D7]
Pushok © (2011-09-08 11:40:00)Пользователь указывает две ветки в TreeView, ту которую надо переместить у ту в которую надо переместить например дерево:
А1___ 0 уровень
_Б1__ 1 уровень
_Б2__ 1 уровень
__В1_ 2 уровень
__В2_ 2 уровень
А2___ 0 уровень
Перемещаем указываем на ветку Б2 в Б1и получится
А1___
_Б1__
__Б2_
___В1
___В2
А2___
И теперь нужна проверка чтоб не допустить перемещения ветка Б2 в ветку В1 или В2 тоесть в свою собственную под ветку
Дай те совет как осуществить такую проверку ветвей?
Ega23 (2011-09-08 16:03:00) [1]
> TTreeNode.HasAsParent
О как...
Век живи - век учись.
Спасибо!
OW (2011-09-08 15:44:00) [2]и я тут писал :)
function TTreeNode.HasAsParent(Value: TTreeNode): Boolean;
begin
if Value <> Nil then
begin
if Parent = nil then Result := False
else if Parent = Value then Result := True
else Result := Parent.HasAsParent(Value);
end
else Result := True;
end;
блин, ни разу не видел.. У меня не подсказывает IDE про такое
OW (2011-09-08 15:40:00) [3]зачем index
я имел ввиду что-то так
function FirstNodeParentToSecond(FirstNode, SecondNode: TTreeNode): Boolean;
var
Parent: TTreeNode;
begin
Result := False;
Parent := SecondNode.Parent;
while Parent <> nil do
begin
if Parent = FirstNode then
begin
Result := True;
Break;
end;
Parent := Parent.Parent;
end;
end;
Pushok (2011-09-08 15:39:00) [4]
> TTreeNode.HasAsParent
Блин а я велосипед изобрел....
Ega23 (2011-09-08 15:29:00) [5]Зачем absoluteIndex?
function CheckNodes(NodeFrom, NodeTo: TTreeNode): Boolean;
var
aNode: TTreeNode;
begin
aNode := NodeTo;
while (aNode<>nil) do
begin
if aNode = NodeFrom then
begin
Result := False;
Exit;
end;
aNode := aNode.Parent;
end;
Result := True;
end;
З.Ы. если я правильно понял условие.
З.З.Ы. писал прямо здесь, код не проверял
Pushok (2011-09-08 15:25:00) [6]Там три варианта: либо false либо true либо undefined
MBo (2011-09-08 15:25:00) [7]TTreeNode.HasAsParent
Pushok (2011-09-08 15:23:00) [8]
> function TForm1.proverka(X, Y: Integer): Boolean;beginWhile
> TreeView1.Items[y].Parent <> nil do Begin If TreeView1.
> Items[x].AbsoluteIndex = TreeView1.Itemsy].Parent.AbsoluteIndex
> then Begin Result:= true; Break; end;
> y:= TreeView1.Items[y].Parent.AbsoluteIndex; end;end;
[Warning] Unit1.pas(70): Return value of function 'TForm1.proverka' might be undefined
function TForm1.proverka(X, Y: Integer): Boolean;
begin
Result:= false;
While TreeView1.Items[y].Parent <> nil do
Begin
If TreeView1.Items[x].AbsoluteIndex = TreeView1.Itemsy].Parent.AbsoluteIndex then
Begin
Result:= true;
Break;
end;
y:= TreeView1.Items[y].Parent.AbsoluteIndex;
end;
end;
Pushok (2011-09-08 15:14:00) [9]Сделал:
function TForm1.proverka(X, Y: Integer): Boolean;
begin
While TreeView1.Items[y].Parent <> nil do
Begin
If TreeView1.Items[x].AbsoluteIndex = TreeView1.Itemsy].Parent.AbsoluteIndex then
Begin
Result:= true;
Break;
end;
y:= TreeView1.Items[y].Parent.AbsoluteIndex;
end;
end;
Использование
var
x1, x2: Integer;
begin
x1:= TreeView1.Selected.AbsoluteIndex;
x2:= ... // указываем AbsoluteIndex то ветки куда хотим переместить
If proverka(x1, x2)= true then
Begin
ShowMessage('Зацикливание уровней! '); // © 1С
exit;
end;
...
OW (2011-09-08 11:44:00) [10]repeat
getparent
if paren = self -> нельзя
until корень