Главная страница
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.011 c
1-1277700449
George
2010-06-28 08:47
2011.12.18
Создание службы - отказывается запускаться


1-1277897030
Tangar83
2010-06-30 15:23
2011.12.18
Ошибка при использовании TWebBrowser


2-1315570446
Евгений07
2011-09-09 16:14
2011.12.18
WSAWaitForMultipleEvents для однонитевого сервера


15-1314943782
Дмитрий С
2011-09-02 10:09
2011.12.18
"Любую точку выпуклой функции можно назвать экстремумом."


1-1277656298
DeusNoxious
2010-06-27 20:31
2011.12.18
Интерактивный Google maps