Форум: "Начинающим";
Текущий архив: 2011.12.18;
Скачать: [xml.tar.bz2];
Внизпроверить ветки в TreeView Найти похожие ветки
← →
Pushok (2011-09-08 11:40) [0]Пользователь указывает две ветки в TreeView, ту которую надо переместить у ту в которую надо переместить например дерево:
А1___ 0 уровень
_Б1__ 1 уровень
_Б2__ 1 уровень
__В1_ 2 уровень
__В2_ 2 уровень
А2___ 0 уровень
Перемещаем указываем на ветку Б2 в Б1и получится
А1___
_Б1__
__Б2_
___В1
___В2
А2___
И теперь нужна проверка чтоб не допустить перемещения ветка Б2 в ветку В1 или В2 тоесть в свою собственную под ветку
Дай те совет как осуществить такую проверку ветвей?
← →
OW © (2011-09-08 11:44) [1]repeat
getparent
if paren = self -> нельзя
until корень
← →
Pushok (2011-09-08 15:14) [2]Сделал:
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;
...
← →
Pushok (2011-09-08 15:23) [3]
> 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 undefinedfunction 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:25) [4]Там три варианта: либо false либо true либо undefined
← →
MBo © (2011-09-08 15:25) [5]TTreeNode.HasAsParent
← →
Ega23 © (2011-09-08 15:29) [6]Зачем 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:39) [7]
> TTreeNode.HasAsParent
Блин а я велосипед изобрел....
← →
OW © (2011-09-08 15:40) [8]зачем 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;
← →
OW © (2011-09-08 15:44) [9]и я тут писал :)
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 про такое
← →
Ega23 © (2011-09-08 16:03) [10]
> TTreeNode.HasAsParent
О как...
Век живи - век учись.
Спасибо!
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2011.12.18;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.004 c