zoukankan      html  css  js  c++  java
  • 黄聪:Delphi的流(5)组件序列化

    源代码:
    ---------------------------------------------------------------------------------

    unit Unit1;

    interface

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

    type
      TForm1 = class(TForm)
        Memo1: TMemo;
        Button1: TButton;
        Button2: TButton;
        Button3: TButton;
        Button4: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
        procedure Button4Click(Sender: TObject);
      private
        { Private declarations }
      public
        constructor Create(AOwner: TComponent); override;
        destructor Destroy; override;

        { Public declarations }
      end;

    var
      Form1: TForm1;

    implementation

    {$R *.dfm}
    {$APPTYPE CONSOLE}
    var
      fPath:string;


    constructor TForm1.Create(AOwner: TComponent);
    begin
      inherited;
      memo1.Text:='这好像和流没什么关系, 其实这就是流的典型操作,'+
      'WriteComponentResFile 和 ReadComponentResFile 分别调用了流类的'+
      'WriteComponentRes 与 ReadComponentRes 方法.'+
      '下面用更直接的流的方式重新实现一次';

      fPath:=ExtractFilePath(Application.ExeName)+'test.dat';

    end;

    destructor TForm1.Destroy;
    begin
      inherited;
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    begin
      WriteComponentResFile(fPath,memo1);
      memo1.Clear;
      ShowMessage('组件memo1序列保存成功!');
    end;

    procedure TForm1.Button2Click(Sender: TObject);
    begin
      ReadComponentResFile(fPath,memo1);
    end;

    {
      上面的操作好像和流没什么关系, 其实这就是流的典型操作,
      WriteComponentResFile 和 ReadComponentResFile 分别调用了流类的
      WriteComponentRes 与 ReadComponentRes 方法.
      下面用更直接的流的方式重新实现一次:
    }


    procedure TForm1.Button3Click(Sender: TObject);
    var
      stream:TStream;
    begin
      stream:=TFileStream.Create(fPath,fmCreate);
      stream.WriteComponentRes(memo1.ClassName,memo1);
      //WriteComponentRes方法首先往流中写入标准Windows 资源文件头,
      //然后将Instance指定的部件写入流中
      //资源文件头可以取任意字符串都可以

      //writeln(memo1.classname);
      stream.Free;
      memo1.Clear;
      ShowMessage('组件memo1序列保存成功!');
    end;

    procedure TForm1.Button4Click(Sender: TObject);
    var
      stream:TStream;
    begin
      stream:=TFileStream.Create(fPath,fmOpenRead);
      stream.ReadComponentRes(memo1);
      stream.Free;
    end;

    end.

    界面代码:
    ----------------------------------------------------------------------------------------------------

    object Form1: TForm1
      Left = 1174
      Top = 520
      Width = 386
      Height = 288
      Caption = '组件序列化  猪悟能'
      Color = clBtnFace
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clWindowText
      Font.Height = -11
      Font.Name = 'MS Sans Serif'
      Font.Style = []
      OldCreateOrder = False
      PixelsPerInch = 96
      TextHeight = 13
      object Memo1: TMemo
        Left = 16
        Top = 16
        Width = 345
        Height = 137
        Lines.Strings = (
          'Memo1')
        TabOrder = 0
      end
      object Button1: TButton
        Left = 24
        Top = 168
        Width = 153
        Height = 25
        Caption = 'WriteComponentResFile'
        TabOrder = 1
        OnClick = Button1Click
      end
      object Button2: TButton
        Left = 192
        Top = 168
        Width = 153
        Height = 25
        Caption = 'ReadComponentResFile'
        TabOrder = 2
        OnClick = Button2Click
      end
      object Button3: TButton
        Left = 24
        Top = 208
        Width = 153
        Height = 25
        Caption = 'stream.WriteComponentRes'
        TabOrder = 3
        OnClick = Button3Click
      end
      object Button4: TButton
        Left = 192
        Top = 208
        Width = 153
        Height = 25
        Caption = 'stream.ReadComponentRes'
        TabOrder = 4
        OnClick = Button4Click
      end
    end

    源代码下载:http://www.rayfile.com/files/ac8f9adc-431e-11df-861a-0015c55db73d/

  • 相关阅读:
    HDU 1009 FatMouse' Trade
    HDU 2602 (简单的01背包) Bone Collector
    LA 3902 Network
    HDU 4513 吉哥系列故事——完美队形II
    LA 4794 Sharing Chocolate
    POJ (Manacher) Palindrome
    HDU 3294 (Manacher) Girls' research
    HDU 3068 (Manacher) 最长回文
    Tyvj 1085 派对
    Tyvj 1030 乳草的入侵
  • 原文地址:https://www.cnblogs.com/huangcong/p/1875085.html
Copyright © 2011-2022 走看看