我用treeview.SaveToStream属性保存到流中,然后写入数据库!读出来的时候先读到流里面,然后用treeview.LoadFromStream写入到树型控件当中,但是问题出现了:树型的结构和文本都正确,但是其中节点的Image Index , Selected Index , State Index 都没有保存,请问这些属性如何一同保存到数据库中?

解决方案 »

  1.   

    //参考如下代码~~type
      TTreeNodeInfo = packed record
        rImageIndex: Integer;
        rSelectedIndex: Integer;
        rStateIndex: Integer;
      end;function TreeViewSaveToStream(mTreeView: TTreeView; mStream: TStream): Boolean;
    var
      I: Integer;
      vTreeNodeInfo: TTreeNodeInfo;
    begin
      Result := False;
      if not (Assigned(mTreeView) and Assigned(mStream)) then Exit;
      mStream.Size := 0;
      mStream.Position := 0;
      I := mTreeView.Items.Count;
      mStream.Write(I, SizeOf(I));
      for I := 0 to mTreeView.Items.Count - 1 do
      begin
        vTreeNodeInfo.rSelectedIndex := mTreeView.Items[I].SelectedIndex;
        vTreeNodeInfo.rImageIndex := mTreeView.Items[I].ImageIndex;
        vTreeNodeInfo.rStateIndex := mTreeView.Items[I].StateIndex;
        mStream.Write(vTreeNodeInfo, SizeOf(vTreeNodeInfo));
      end;
      mTreeView.SaveToStream(mStream);
      Result := True;
    end; { TreeViewSaveToStream }function TreeViewLoadFromStream(mTreeView: TTreeView; mStream: TStream): Boolean;
    var
      I: Integer;
      vTreeNodeInfo: TTreeNodeInfo;
    begin
      Result := False;
      if not (Assigned(mTreeView) and Assigned(mStream)) then Exit;
      mStream.Position := 0;
      mStream.Read(I, SizeOf(I));
      mStream.Position := SizeOf(I) + I * SizeOf(vTreeNodeInfo);
      mTreeView.LoadFromStream(mStream);
      mTreeView.Items.BeginUpdate;
      try
        mStream.Position := SizeOf(I);
        for I := 0 to I - 1 do
        begin
          mStream.Read(vTreeNodeInfo, SizeOf(vTreeNodeInfo));
          mTreeView.Items[I].SelectedIndex := vTreeNodeInfo.rSelectedIndex;
          mTreeView.Items[I].ImageIndex := vTreeNodeInfo.rImageIndex;
          mTreeView.Items[I].StateIndex := vTreeNodeInfo.rStateIndex;
        end;
      finally
        mTreeView.Items.EndUpdate;
      end;
      Result := True;
    end; { TreeViewLoadFromStream }procedure TForm1.Button1Click(Sender: TObject);
    var
      vMemoryStream: TMemoryStream;
    begin
      vMemoryStream := TMemoryStream.Create;
      try
        TreeViewSaveToStream(TreeView1, vMemoryStream);
        TreeViewLoadFromStream(TreeView2, vMemoryStream);
      finally
        vMemoryStream.Free;
      end;
    end;