首页 > 系统相关 >关于 Delphi 中流的使用 用 TMemoryStream(内存流) 入门

关于 Delphi 中流的使用 用 TMemoryStream(内存流) 入门

时间:2023-05-13 09:00:44浏览次数:52  
标签:end Sender TMemoryStream Delphi TForm1 TObject 内存 mStream procedure

所谓"流", 就是一段数据或是一块内存;
在进行流操作时, 我们不必关心流中的数据到底是什么; 只需要知道流的大小和当前的指针位置. 所以流只有两个属性:
Size、Position.
对流的操作, 不过就是读取和写入. 所以流最主要的方法就是 Read 和 Write.
在很多控件的使用中, 读取主要用 LoadFromStream; 写入主要用 SaveToStream.

举个例子: (建立新工程, 添加两个 Memo、两个 Button)



unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Memo2: TMemo;
    Button1: TButton;
    Button2: TButton;

    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

var
  mStream: TStream; {声明一个流对象}

procedure TForm1.FormCreate(Sender: TObject);
begin
  mStream := TMemoryStream.Create;
  {TStream 是抽象类, 只能通过其子类实例化; 这里我们用了内存流来生成实例}

  Memo1.Lines.Text := 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  {给 Memo1 个初始值}
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.Lines.SaveToStream(mStream);       {把 Memo1 中的内容写入到流}

  ShowMessage(IntToStr(mStream.Size));     {26, 当前流的大小}
  ShowMessage(IntToStr(mStream.Position)); {26, 当前流的指针}
end;


procedure TForm1.Button2Click(Sender: TObject);
begin
  mStream.Position := 4;               {调整流的当前指针位置}
  Memo2.Lines.LoadFromStream(mStream); {读出流中的内容到 Memo2}

  {
    现在 Memo2 中的内容应该是: EFGHIJKLMNOPQRSTUVWXYZ
    如果 Position 是 0, Memo2 读出的内容会是: ABCDEFGHIJKLMNOPQRSTUVWXYZ
    如果 Position 等于 Size, 在这里如果是 26, Memo2 就读不出什么了.
  }

end;


procedure TForm1.FormDestroy(Sender: TObject);
begin
  mStream.Free; {流释放时, 所用内存当然也会同时释放}
end;

end.

标签:end,Sender,TMemoryStream,Delphi,TForm1,TObject,内存,mStream,procedure
From: https://www.cnblogs.com/lucken2000/p/17396727.html

相关文章

  • 关于 Delphi 中流的使用 遍历读取流中的所有数据
    unitUnit1;interfaceuses Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms, Dialogs,StdCtrls;type TForm1=class(TForm)  Memo1:TMemo;  Memo2:TMemo;{需要添加两个Memo用于显示}  Button1:TButton;  ......
  • java中this的内存原理以及成员变量和局部变量
    this的内存原理1、this的作用:区分局部变量和成员变量eg:publicclassStudent{ privateintage; publicvoidmethod(){ intage=10; System.out.println(age);//10 System.out.println(this.age);//0使用this.可以直接使用成员变量的age }}2、this的本质:代......
  • delphi StyleControl中DB控件的使用说明
    这两天听大佬说"可视化绑定"的效率很低,再加对下拉菜单,单选,复选框等控件绑定操作的未知,于是我决定把普通组件,改为DB组件. 正常来讲,基本上所有DB组件只要设置好了数据源和字段绑定,就能显示数据来, 但是我这边就出现了一点意外,源于对sqlite数据库认知度不够的原因......
  • Vue 打包项目出现内存溢出问题
    Vue项目打包遇到内存溢出的问题:npmiincrease-memory-limit-gincrease-memory-limit再执行npmrundev后出现以下问题: 百度了一下,在node_module下的.bin文件夹中查找这个文件: 将这个字符串的双引号去掉:再次运行npmrundev 就可以了 ......
  • Delphi 字符串拆分/分割[1] - TStringList
    1、TStringList默认以','拆分字符onstconstr:String='aaa,bbb,ccc,ddd';varstrs:TStrings;i:Integer;beginstrs:=TStringList.Create;strs.CommaText:=constr;fori:=0toStrs.Count-1doShowMessage(Strs[i]);//aaabbbcccd......
  • delphi模板引擎
    programExample;usesSempare.Template;typeTInformation=recordname:string;favourite_sport:string;count:integer;end;beginvartpl:=Template.Parse('Mynameis<%name%>.'#13#10+'Myfavouritesportis<%......
  • Delphi中使用ADO连接Excel
    第一部分: 1.设置ADOConnection的ConnectionString属性的OLEDB的提供者要选择MicrosoftJet4.0OLEDBProvider(这本来是用于连接Access数据库的驱动程序,但也可打开Excel文件),按"下一步"按钮2.选择数据库名称。注意:Excel的扩展名是*.xls,而默认文件类型是MicrosoftAcce......
  • Java内存模型原理,你真的理解吗?(转载)
    内存模型产生背景在介绍Java内存模型之前,我们先了解一下物理计算机中的并发问题,理解这些问题可以搞清楚内存模型产生的背景。物理机遇到的并发问题与虚拟机中的情况有不少相似之处,物理机的解决方案对虚拟机的实现有相当的参考意义。物理机的并发问题硬件的效率问题计算机处......
  • Delphi 检测密码强度 规则(仿 google)
    一、密码长度:5分:小于等于4个字符10分:5到7字符25分:大于等于8个字符二、字母:0分:没有字母10分:全都是小(大)写字母20分:大小写混合字母三、数字:0分:没有数字10分:1个数字20分:大于等于3个数字四、符号:0分:没有符号10分:1......
  • delphi 遍历枚举、获取枚举值的名称
    遍历枚举、获取枚举值的名称代码遍历枚举usesSystem.TypInfo;procedureTForm1.Button1Click(Sender:TObject);varI:TAlign;beginforI:=Low(TAlign)toHigh(TAlign)dobeginMemo1.Lines.Add('名称'+GetEnumName(TypeInfo(TAlign),Ord(I))+'值......