Перемещение узлов в TreeView

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Large

Сообщение Large »

Народы, прошу вашей помощи!

Есть конструкция:
while (MainForm.DirTree.Selected.GetPrevSibling<>nil) and (not MainForm.DirTree.Selected.getPrevSibling.HasChildren) do
MainForm.DirTree.Selected.MoveTo(MainForm.DirTree.Selected.getPrevSibling,naInsert);

DitrTree – компонент типа TTreeView; MainForm – собственно, форма программы.

Эта конструкция обеспечивает перенос узла структуры (этот узел в данный момент Selected), имеющего дочерние узлы, вверх по списку узлов если еще не достигнут верх текущего уровня дерева и у предыдущего узла нет дочерних узлов. То есть по ходу работы формируется дерево, в котором узлы, имеющие дочерние узлы, должны располагаться вверху своего уровня, а затем – узлы без подчиненных узлов.

В Delphi 7 это работает прекрасно.
Lazarus 0.9.8 beta говорит, что “Project raised exeption class 'External: SIGSEGV'”, открывает treeview.inc и ставит маркер на функции:

function TTreeNode.GetPrevSibling: TTreeNode;
begin
Result:=FPrevBrother;
end;

Я не могу понять, почему не работает...
Исходники treeview.inc смотрел, но толком разобраться в них пока не удалось... :(


Буду благодарен за любые идеи...

P.S. 0.9.10 мне пока не доступен :(
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

Не знаю, нужно ли еще, но... после запятых нужен пробел.

Код: Выделить всё

procedure TForm1.Button4Click(Sender: TObject);
begin

 if form1.TreeView1.Selected=Form1.TreeView1.Items.GetFirstNode then begin end
 else
      begin
              Form1.TreeView1.Selected.MoveTo(Form1.TreeView1.Selected.GetPrevVisible, naInsert);
     end;

end;       
Ответить