怎样将不同Tstringgrid的内容通过Tfilestream写入一个文件中,并能够从这一个Tfilestream生成的文件分别读到相应的Tstringgrid?(现在已经能够实现一个Tstringgrid的写入和读入),拜托高手了单个Tstringgrid的存入和读出我分别这样实现的
//-------------以下是存入
procedure TForm1.BitBtn2Click(Sender: TObject);
var st:TFileStream;
    i,len:integer;
begin
    st:=TFileStream.Create('test.bin',fmcreate);
    with StringGrid1 do
    begin
      st.Write(RowCount,sizeof(RowCount));   
      st.Write(ColCount,sizeof(ColCount));
      for i:=0 to RowCount-1 do
      begin
        len:=Length(Rows[i].Text);
        st.Write(len,sizeof(len));
        st.Write(Rows[i].Text[1],len);
      end;
    end;
    st.Free;end;
///----------------------以下是读出
procedure TForm1.BitBtn3Click(Sender: TObject);
var st:TFileStream;
    i,len:integer;
    S:string; ro,co:integer;
begin
    st:=TFileStream.Create('test.bin',fmOpenRead);
    with StringGrid1 do
    begin
      st.Read(ro,sizeof(ro));
      st.Read(co,sizeof(co));
      RowCount:=ro;
      ColCount:=co;
      for i:=0 to RowCount-1 do
      begin
        st.Read(len,sizeof(len));
        Setlength(S,len);
        st.Read(S[1],len);
        Rows[i].Text:=S;
      end;
    end;
    st.Free;
end;
//------
我怎么修改上述代码能实现我所说的功能?

解决方案 »

  1.   

    这个太简单了。
    方法一:每个Tstringgrid写一个文件。
    方法二:如你所用的方法一样:建一个文件头,写上Tstringgrid的名字,标志,甚至大小等。
    写完一个Tstringgrid,再写第二个Tstringgrid。
    读完第一个,再读第二个。或者在文件头中建一个Tstringgrid的索引,写上每个Tstringgrid的位置,那读的时候就更快一些。
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      st: TFileStream;
      i, len: integer;
      iCount, K: integer; //
      cp: TComponent;
    begin
      st := TFileStream.Create('test.bin', fmcreate);
      iCount := 3;            //假設是3個, 分別為 StringGrid1, StringGrid2, ...
      st.Write(iCount, SizeOf(Integer));
      for k := 1 to iCount do
      begin
        with TStringGrid(FindComponent('STringGrid' + IntToStr(k))) do
        begin
          st.Write(RowCount, sizeof(RowCount));
          st.Write(ColCount, sizeof(ColCount));
          for i := 0 to RowCount - 1 do
          begin
            len := Length(Rows[i].Text);
            st.Write(len, sizeof(len));
            st.Write(Rows[i].Text[1], len);
          end;
        end;
      end;
      st.Free;
    end;procedure TForm1.Button2Click(Sender: TObject);
    var
      st: TFileStream;
      i, len: integer;
      S: string;
      ro, co: integer;
      iCount, K: integer;
    begin
      st := TFileStream.Create('test.bin', fmOpenRead);
      st.Read(icount, sizeOf(integer));
      for K := 1 to iCount do
      begin
        with TStringGrid(FindComponent('STringGrid' + IntToStr(k))) do
        begin
          st.Read(ro, sizeof(ro));
          st.Read(co, sizeof(co));
          RowCount := ro;
          ColCount := co;
          for i := 0 to RowCount - 1 do
          begin
            st.Read(len, sizeof(len));
            Setlength(S, len);
            st.Read(S[1], len);
            Rows[i].Text := S;
          end;
        end;
      end;
      st.Free;
    end;