用teetree2.0或teechart8.06写个小程序保存动态创建的树,但是碰到了问题,可能和持久化有关,但始终没找到解决办法:
保存树的代码:
procedure Tstep_wayfrm.Button2Click(Sender: TObject);
var st:TMemoryStream;
begin
  st:=TMemoryStream.Create;
  SaveTreeToStream(Tree1,st);
   with aqtemp1 do
    begin
      close;
      sql.Text:='select * from flow_tree';
      Open;
      Append;
      TBlobField(FieldByName('tree')).LoadFromStream(st);
      Post;
    end;
    st.Free;
    Tree1.Clear;end;
载入数据库树的代码:
procedure Tstep_wayfrm.Button3Click(Sender: TObject);
var st:TMemoryStream;
begin
   with aqtemp1 do
    begin
      close;
      SQL.Text:='select * from flow_tree';
      Open;
      st:= TADOBlobStream.Create(TBlobField(FieldByName('tree')),bmRead);      LoadTreeFromStream(tcustomtree(tree1),st);
    end;
    st.Free;end;
以上调试通过,在设计状态下的树可以正常保存和读入,但是在程序运行阶段添加的树元素,保存后没有!

解决方案 »

  1.   

    补充一下:动态添加用的两种方法:
    1.  lshape:=Tree1.Add(200,60,'aa',nil);
    2.从保存的文本中导入:procedure Tstep_wayfrm.Button4Click(Sender: TObject);
    begin
    Tree1.Clear;
      Tree1.LoadFromStrings(Memo1.Lines);end;
    反正动态导入的德无法保存,以前的就有。
      

  2.   

    又测试了好久,发现一个问题,用组件自带的treeeditor也只有在设计时候才有用,在运行新加的东西一样无法保存,就算用组件本身的保存。
    用tree2自带的演示程序同样如此,不知是组件缺陷还是运行时和设计时有什么不同?
      

  3.   

    另外还有一个奇怪的现象就是用TEditorPanel组件,当tree属性为空时,编辑的东西可以保存,但是当连到特定的树以后,在运行时添加的东西一样不能保存!