Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.12.18;
Скачать: CL | DM;

Вниз

проверить ветки в 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 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: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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.015 c
2-1315504959
x2088
2011-09-08 22:02
2011.12.18
Системное меню окна


2-1315378230
Виктор
2011-09-07 10:50
2011.12.18
Предупреждение


2-1315421110
Эцилоп
2011-09-07 22:45
2011.12.18
Эмуляция работы мышки


15-1314332947
xayam
2011-08-26 08:29
2011.12.18
Приглашение на Хабр


15-1314822593
Юрий
2011-09-01 00:29
2011.12.18
С днем рождения ! 1 сентября 2011 четверг