怎样将不同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;
//------
我怎么修改上述代码能实现我所说的功能?
//-------------以下是存入
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;
//------
我怎么修改上述代码能实现我所说的功能?
解决方案 »
- DBGrid 显示 字段 问题 (解决后给100分)
- 转了一圈又回来编程了。。
- Rundll32.exe 加载出错?
- delphi ado 连接oracle 执行insert update等语句 会自动提交吗?
- 这个语句怎么写?
- delphi7如何创建PPPOE并进行拨号?
- 请问仓库软件的数据库的表怎样设计,提供两个方案
- 广州的同行或者对暨南大学比较熟悉的人:调查一下座落在暨南大学内的广东亿康公司,不知道这家公司怎么样?
- 大家推荐一下自己用着最得心应手的delphi控件!参加者有分!
- 请问这样的查询应该如何做
- 如何获取数据库导入数据的进度?
- 把分全给了,怎样才能把frame窗体嵌在form窗体上????
方法一:每个Tstringgrid写一个文件。
方法二:如你所用的方法一样:建一个文件头,写上Tstringgrid的名字,标志,甚至大小等。
写完一个Tstringgrid,再写第二个Tstringgrid。
读完第一个,再读第二个。或者在文件头中建一个Tstringgrid的索引,写上每个Tstringgrid的位置,那读的时候就更快一些。
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;