请教流高手!(有源代码)

Linux2001 2001-08-02 07:16:44
为什么我使用流没有任何出错信息但是却无法保存控件的属性值呢?源代码如下:
procedure TForm1.Button2Click(Sender: TObject);
var
AStream:TFileStream;
I:integer;
begin
AStream:=TFileStream.Create('Save.Dat',fmCreate);
for I:=0 to PageControl1.ControlCount-1 do
if ((Controls[i] is TPageControl) or (Controls[i] is TToolBar)) then
AStream.WriteComponent(Controls[i]);
AStream.Free;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
AStream:TFileStream;
AReader:TREader;
New:TComponent;
begin
AStream:=TFileStream.Create('Save.Dat',fmOpenRead);
while AStream.Position<AStream.Size do
begin
AReader:=TReader.Create(AStream,4096);
try
AReader.Parent:=Form1;
New:=AReader.ReadRootComponent(Nil);
Form1.InsertComponent(New);
finally
AReader.Free ;
end;
end;
AStream.Free;
end;
这样的,但是保存的Save.Dat为0字节,什么都没有?我先说一下,我的ToolBar是在TPageControl上的!

...全文
109 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Linux2001 2001-09-27
  • 打赏
  • 举报
回复
是没有问题,但是如果你需要保存一个ToolBar上的ToolButton的话就不行了
tikkypeng 2001-08-28
  • 打赏
  • 举报
回复
我试了你的程序~没有问题呀~~
Linux2001 2001-08-28
  • 打赏
  • 举报
回复
没有人了么
Linux2001 2001-08-19
  • 打赏
  • 举报
回复
我使用了两个流文件,因为我发现当程序读取流文件时使用了释放本身的控件加载流文件中的控件的方法,但是我使用两个流文件仍然无法解决问题,因为两个流文件中的控件都是动态生成的,然后,把这些动态生成的控件写入流文件,但是读取时,无法得到正确结果
KingShen 2001-08-16
  • 打赏
  • 举报
回复
不行阿!
ghz2000 2001-08-11
  • 打赏
  • 举报
回复
我不知道是不是你的
AStream:TFileStream;
astream能不能记录控件的属性值
即AStream.WriteComponent(Controls[i]);是否做了你想要得事。
不过你完全可以这样:
procedure TForm1.ComponentToFile(Component: TComponent);
var
BinStream:TMemoryStream;
AStream: TFileStream;
begin
BinStream := TMemoryStream.Create;
try
AStream:=TFileStream.Create('Save.Dat',fmCreate);
try
BinStream.WriteComponent(Component);
BinStream.Seek(0, soFromBeginning);
ObjectBinaryToText(BinStream, AStream);
AStream.Seek(0, soFromBeginning);
finally
AStream.Free;
end;
finally
BinStream.Free
end;
end;
blackfiles 2001-08-11
  • 打赏
  • 举报
回复
我不知道你到底想保存什么控减的属性值??
procedure TForm1.Button2Click(Sender: TObject);
var
AStream:TFileStream;
I:integer;
begin
AStream:=TFileStream.Create('Save.Dat',fmCreate);
for I:=0 to PageControl1.ControlCount-1 do ///你这里是以PageControl的ControlCount为循环,
if ((Controls[i] is TPageControl) or (Controls[i] is TToolBar)) then
AStream.WriteComponent(Controls[i]); //这里的Controls[i],是Form上的所有的Controls,显然并不应该这样的,如果你PageControl建立的标签数和Form上的控件数不等,那首先程序就出错。
AStream.Free;
end;

改为: for I=0 to Form.ControlCount-1 do
begin
if (Controls[i] is TPageControl) then
AStream.WriteComponent(Controls[i]);
end;

Linux2001 2001-08-11
  • 打赏
  • 举报
回复
还没有高手来么
Linux2001 2001-08-05
  • 打赏
  • 举报
回复
快救救我啊
Linux2001 2001-08-02
  • 打赏
  • 举报
回复
没有人知道么

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧