當改為 MyNode: array [0..3] of TTreeNode 就沒有錯誤了,
不知何因,請指教!

解决方案 »

  1.   

    SetLength函数是没错的,原因是不是下标溢出,否则就只能是其他原因了。单步运行调调!
      

  2.   

    procedure TForm1.LoadTree(treeDB: TDataSet);
    var
      NodeTxt: string;
      Level: integer;
      MyNode: array  of TTreeNode;
      pCurID: PMyRec;
    begin
      SetLength(MyNode,4);
      Screen.Cursor := crHourGlass;
      tree.Enabled := true;
      tree.Items.Clear;
      Level := 0;  New(pCurID);
      pCurID^.FName := '';
      MyNode[Level] := tree.Items.AddObject(Tree.TopItem,cTreeRootTxt,pCurID);
      MyNode[Level].ImageIndex := Level;
      MyNode[Level].SelectedIndex := Level;  with treeDB do
      begin
        try
          if not Active then open;
          first;
          while not Eof do
          begin
            New(pCurID);
            pCurID^.FName := FieldByName('id').AsString;        NodeTxt := ' ' + FieldByName('deptName').AsString + ' ';
            Level := GetNodeLevel(cTreeCodeFormat,pCurID^.FName);        if Level > 0 then
            begin
              MyNode[Level] := tree.Items.AddChildObject(MyNode[Level-1],
                NodeTxt,pCurID);
              MyNode[Level].ImageIndex := Level;
              MyNode[Level].SelectedIndex := Level;
            end;
            Next;
          end;
          finally
            Close;
        end;
    //    MyNode[0].expand(false);
        Screen.Cursor := crDefault;
      end;
    end;