Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.004 c
2-1315922445
Сергей М.
2011-09-13 18:00
2011.12.18
OpenCV - поиск алф.-цифр-символьных объектов в изображении


15-1314451347
Rouse_
2011-08-27 17:22
2011.12.18
Так проверим же алгебру гармонией! :)


6-1248173569
Michael
2009-07-21 14:52
2011.12.18
smtp/pop3 без компонентов


1-1277214927
Дмитрий Белькевич
2010-06-22 17:55
2011.12.18
Почему может не работать FileExisit?


3-1268739476
Rob
2010-03-16 14:37
2011.12.18
СУБД с возможностью хранения текстовых документов в сжатом виде.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский