关于TMemoryStream,这段代码中的Write()怎么用?

wm7523 2003-08-21 10:14:37
procedure TForm1.SaveCtrls(Stream: TMemoryStream);
const
EditorFlag =$10000;
var
Flag:LongInt;
Ctrl:TControl;
begin
for i:=0 to ControlCount-1 do
begin
Ctrl:=Controls[i];
if(Ctrl is TEditor)then
begin
Flag:=EditorFlag+Ord(TEditor(Ctrl).CtrlType);
Stream.Write(Flag,sizeof(LongInt));
TEditor(Ctrl).SaveToStream(Stream);
end;
end;
Flag:= 0;
Stream.Write(Flag,sizeof(LongInt));
end;

这里面的Stream.Write()怎么用,
这句话Stream.Write(Flag,sizeof(LongInt));起什么作用,我看了帮助,它说第一个参数为将要写入数据的缓冲区

,但是这里把什么写到里面了呢
急急解决马上结贴
...全文
121 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
baguli 2003-08-21
  • 打赏
  • 举报
回复
上述代码我没太看明白,干什么用?
我猜想Stream.Write(Flag,sizeof(LongInt));//这句什么作用?
是一个TEditor记录的开始。
后一个Stream.Write(Flag,sizeof(LongInt));
是写入一个结束符
wm7523 2003-08-21
  • 打赏
  • 举报
回复
怎么没有人邦忙呀
wm7523 2003-08-21
  • 打赏
  • 举报
回复
up有分
wm7523 2003-08-21
  • 打赏
  • 举报
回复
begin
for i:=0 to ControlCount-1 do
begin
Ctrl:=Controls[i];
if(Ctrl is TEditor)then
begin
Flag:=EditorFlag+Ord(TEditor(Ctrl).CtrlType);
Stream.Write(Flag,sizeof(LongInt));//这句什么作用
TEditor(Ctrl).SaveToStream(Stream);
end;
end;
Flag:= 0;
Stream.Write(Flag,sizeof(LongInt));//这句又什么作用
end;
请高手解释
wm7523 2003-08-21
  • 打赏
  • 举报
回复
太感谢大家了,我明白了一些了,
如果再没有回复的话准备结贴...
lxpbuaa 2003-08-21
  • 打赏
  • 举报
回复
“那么我要想把top,left,width读出来是不是还是要按顺序读呢?”
是的。
如果是对数组类操作,如字符串、数组等,写入的时候应该加上起始位子,否则可能出错,入:
var
S: String;
stream.write(s, sizeof(s));
应该是
stream.write(s[1], sizeof(s));

————————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
————————————————————————————————————

zhangheaaa 2003-08-21
  • 打赏
  • 举报
回复
Stream: TMemoryStream 是获取内存流的变量
Stream.Write(Flag,sizeof(LongInt));是直接操纵内存流变量,将flag写入内存流
TEditor(Ctrl).SaveToStream(Stream);是调用teditor的函数方法将该editor的信息写入内存
cristinehowe 2003-08-21
  • 打赏
  • 举报
回复
是这样的,先进先出
不过要记得Stream.Position=0
wm7523 2003-08-21
  • 打赏
  • 举报
回复
比如我写时这样
top=100;
left=200;
width=220;
stream.write(top,4);
stream.write(left,4);
stream.write(width,4);
那么我要想把top,left,width读出来是不是还是要按顺序读呢
var h:longint;
stream.read(h, 4);
top = h;
stream.read(h, 4);
left = h;
stream.read(h, 4);
width = h;

这样对吧,

如果要是串的话呢,
var s:String;
a: string;
用stream.write(s, sizeof(s));读
用stream.read(a, length(s));取
是这样吧




lxpbuaa 2003-08-21
  • 打赏
  • 举报
回复
write和 writebuffer的唯一区别是:
如果writebuffer操作不成功,会激发异常而write不会。

————————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
————————————————————————————————————
lxpbuaa 2003-08-21
  • 打赏
  • 举报
回复
function Write(const Buffer; Count: Longint): Longint;
将Count字节长度的Buffer数据写入流中。

Stream.Write(Flag,sizeof(LongInt));
意思是将整数Flag写入流。sizeof(LongInt)结果为4,因为一个LongInt类型整数占用4个字节。

————————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
————————————————————————————————————
wm7523 2003-08-21
  • 打赏
  • 举报
回复
up有分,不够可再加分,今天我必须解决了
IORILI 2003-08-21
  • 打赏
  • 举报
回复
up 学习才是硬道理
wm7523 2003-08-21
  • 打赏
  • 举报
回复
谁能讲一下TmemoryStream的write, writebuffer的用法,谢谢
wm7523 2003-08-21
  • 打赏
  • 举报
回复
急急急
wm7523 2003-08-21
  • 打赏
  • 举报
回复
procedure WriteStream(Stream:TStream;const s:string);
var
iLen:Integer;
begin
iLen:=Length(s);
Stream.Write(iLen,Sizeof(iLen));
if(iLen>0)then begin
Stream.WriteBuffer(Pointer(s)^,iLen);
end;
end;
那这个可以看明白了吧这里也有一个
Stream.Write(iLen,Sizeof(iLen));
我查了一些贴子,但还是弄不明白
内容概要:本文围绕“粒子群优化算法驱动的永磁同步电机电流环多参数协同辨识研究”,提出一种基于Simulink仿真实现的高精度参数辨识方法,旨在解决永磁同步电机(PMSM)在高性能电流控制因关键参数(如电感、电阻、永磁磁链等)不准确或时变所导致的控制性能下降问题。研究构建了PMSM的精确数学模型,并在Simulink环境搭建完整的电流环控制系统仿真平台,创新性地引入粒子群优化算法(PSO)对多个关键参数进行在线或多工况下的协同辨识。文详细阐述了PSO算法的核心机制、适应度函数的设计原则(通常基于模型输出与实际响应的误差最小化)、参数初始化与收敛判据,并通过大量仿真实验验证了该方法在不同负载和运行条件下的辨识精度、收敛速度与强鲁棒性,有效提升了电流环的动态响应能力、抗干扰性和整体控制系统的稳定性。; 适合人群:具备电机控制理论、现代智能优化算法基础及MATLAB/Simulink仿真能力,从事电气工程、自动化控制、新能源汽车电驱动系统等领域的高校研究生、科研人员及企业研发工程师。; 使用场景及目标:①应用于高精度伺服驱动、电动汽车电驱系统等对电机参数敏感的高端装备,实现控制器的精细化标定与自适应;②为智能优化算法在复杂非线性系统参数辨识领域的工程应用提供完整的仿真案例和技术范本;③服务于电机控制系统的故障诊断、性能评估及下一代自整定控制器的研发。; 阅读建议:建议读者结合提供的Simulink模型与MATLAB代码进行动手实践,重点剖析PSO算法与电机模型的耦合机制,深入理解适应度函数的构建逻辑,并可进一步尝试将该方法拓展至温度补偿、磁饱和等非线性因素的联合辨识,或迁移至其他类型的电机(如感应电机)控制,以深化对数据驱动与模型驱动融合控制策略的理解。

5,943

社区成员

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

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