Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

проверить ветки в 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 корень


Наверх

Титульная страница Поиск, карта сайта Написать письмо