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


15-1313768120
Омлет
2011-08-19 19:35
2011.12.18
Яндекс упал...


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


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


15-1315168191
Юрий
2011-09-05 00:29
2011.12.18
С днем рождения ! 5 сентября 2011 понедельник





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский