В проекте для отображения иерархической структуры используется компонент TVirtualTree.
При построении элементов дерева используется рекурсивная функция:
- Код: Выделить всё
procedure TAddAccessPoliticForm.AddChild(PNode:PVirtualNode;ParentId:Integer;Items:TList);
var
Node:PVirtualNode;
GroupItem:PTreeItem;
i:integer;
Item:TContraGroupItem;
begin
for i:=1 to Items.Count-1 do
begin
Item:=TContraGroupItem(Items[i]);
if Item.Pid= ParentId then
Begin
//!!!Ошибка возникает здесь. При вставке нового потомка, причем это случается при построении дерева на 3-ем уровне.
Node:=ContraTree.InsertNode(PNode,amAddChildLast);
GroupItem:= ContraTree.GetNodeData(Node);
if Assigned(GroupItem) then
begin
GroupItem^.Id:=Item.Id;
GroupItem^.PId:=Item.Pid;
GroupItem^.SId:=Item.Sid;
GroupItem^.Tpe:=Item.Tpe;
GroupItem^.Name:=Item.Name;
GroupItem^.Checked:=Item.Checked;
Node^.CheckType:=ctCheckBox;
if GroupItem^.Checked then
Node^.CheckState:=csCheckedNormal
else
Node^.CheckState:=csUncheckedNormal;
if GroupItem^.Tpe in [COUNTERAGENT_GROUP,COUNTERAGENT] then
AddChild(Node,GroupItem^.SID,Items);
end;
Node^.States:=Node^.States+[vsInitialized];
end;
end;
end;
При запуске программы собранной в linux+lazarus 0.9.27+fpc2.2.4 при построении дерева вылетает ошибка RunError 207.
При чем при работе в Windows все работает отлично.
Странность ошибки еще заключается в том, что она возникает в одном месте программы. То есть подобные процедуры используется еще в нескольких местах, но там все нормально, дерево рисуется.
В общем я в недоумении