喫茶XRAYトップページ

[スレッド全体
]

[11111] Re6:コンポーネントの保存返信 削除
2017/4/17 (月) 00:00:39 Konnoya
▼ Mr.XRAYさん▼ takiさん

これ、私も過去にチャレンジしてた事があります。
辿り付いた結果が TFileStream の ReadComponent & WriteComponentプロパティ
でしたが、試しにOnClickイベント有り/無しでファイルを作ってみた所、
保存されたファイルのバイナリに変化は無かったと記憶してます。

複数のリッチエディットのテキストをまとめて1つのファイルにするテクニックを使って、
コンポーネントとメソッドをどうにかまとめて保存できないかと試行錯誤しましたが、
どうやらそんな問題でも無いらしく、良く判らないままで終わりました(笑)

プロジェクトを読み込む際の*.dfmファイルみたいに、
コンポーネントのテキスト情報を読み込む「何か」があるんじゃないか?と
思ってましたが…。

[11112] Re7:コンポーネントの保存返信 削除
2017/4/17 (月) 07:51:25 Mr.XRAY
▼ Konnoyaさん

> 保存されたファイルのバイナリに変化は無かったと記憶してます。

ですね.
テキスト形式で保存するとなると,RTTI から取得してとか,
↓ な方法とか... どちらも実際やってみないとどこまで可能かは不明ですが...

[ Delphi: REST.JSON を利用したオブジェクトの直列化]
http://d.hatena.ne.jp/igapyon/20151203
[ユーザー オブジェクトのシリアル化]
http://docwiki.embarcadero.com/RADStudio/Seattle/ja/%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC_%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%AE%E3%82%B7%E3%83%AA%E3%82%A2%E3%83%AB%E5%8C%96


type
  TMyApp = class(TObject)
  private
    FName: string;
    FAge: Integer;
    FPhoto: TBytes;
  published
    property Name: string read FName write FName;
    property Age: Integer read FAge write FAge;
    property Photo: TBytes read FPhoto write FPhoto;
  end;

  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Image1: TImage;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

uses
  REST.JSON;

{$R *.dfm}

//=============================================================================
//  フォーム生成時の処理
//=============================================================================
procedure TForm1.FormCreate(Sender: TObject);
begin
  Caption := 'JSON を利用したシリアライズ';
  Edit1.Text := '私は誰';
  Edit2.Text := '100';
end;

//=============================================================================
//  Delphi: REST.JSON を利用したオブジェクトの直列化
//
//  [いがぴょんの日記@はてな]より
//  http://d.hatena.ne.jp/igapyon/20151203
//
//  usesにREST.JSONが必要
//  動作確認 Window 7 U64(SP1) + DelphiXE5(UP2) Pro VCL-32
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
  LMyApp  : TMyApp;
  LStream : TMemoryStream;
begin
  LMyApp  := TMyApp.Create;
  LStream := TMemoryStream.Create;

  try
    LMyApp.name := Edit1.Text;
    LMyApp.Age  := StrToInt(Edit2.Text);
    Image1.Picture.Bitmap.SaveToStream(LStream);

    SetLength(LMyApp.FPhoto, LStream.Size);
    LStream.Position := 0;
    LStream.Read(LMyApp.Photo[0], LStream.Size);

    Memo1.Lines.Text := TJson.ObjectToJsonString(LMyApp);
  finally
    FreeAndNil(LMyApp);
    FreeAndNil(LStream);
  end;
end;



[11114] Re8:コンポーネントの保存返信 削除
2017/4/17 (月) 15:22:43 Mr.XRAY
> テキスト形式で保存するとなると,RTTI から取得してとか,

もし,朝鮮してみようという方がいましたら,福士さんのが参考になります.
もちろん「他に急ぐ仕事がない」人に限るかも知れませんが ( <-- しつこい !)

「Delphi言語再入門」〜拡張されたRTTIを試してみる
https://community.embarcadero.com/images/42116/T8_Part2.pdf


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82