プロパティ値の保存および読み込みを行うメソッドの作成
Published でないプロパティの保存と読み込み への移動
published 以外の可視性を持つプロパティの保存および読み込みを行うには、まず、プロパティ値を保存するためのメソッドとプロパティ値を読み込むためのメソッドをそれぞれ作成する必要があります。そのためには、以下の 2 つの選択肢があります。
- プロパティ値を保存する TWriterProc 型のメソッドと、プロパティ値を読み込む TReaderProc 型のメソッドをそれぞれ作成します。このアプローチでは、単純型の保存および読み込みを行う Delphi の組み込み機能を利用できます。Delphi 側で保存と読み込みの方法がわかっている型からプロパティ値ができている場合は、このアプローチを使用します。
- TStreamProc 型のメソッドを 2 つ作成します。1 つはプロパティ値を保存するため、もう 1 つはプロパティ値を読み込むためです。TStreamProc はストリームを引数に取ります。そのストリームのメソッドを使用して、プロパティ値の読み書きを行えます。
たとえば、実行時に作成されるコンポーネントを表すプロパティを考えてみましょう。Delphi 側では、このプロパティ値を書き込む方法がわかっていますが、コンポーネントがフォーム デザイナで作成されないため、自動的には書き込みをしません。ストリーミング システムでは既にコンポーネントの読み込みと保存ができるようになっているので、第 1 のアプローチを使用できます。以下のメソッドでは、MyCompProperty というプロパティの値として動的に作成されるコンポーネントの読み込みと保存を行います。
procedure TSampleComponent.LoadCompProperty(Reader: TReader);
begin
if Reader.ReadBoolean then
MyCompProperty := Reader.ReadComponent(nil);
end;
procedure TSampleComponent.StoreCompProperty(Writer: TWriter);
begin
Writer.WriteBoolean(MyCompProperty <> nil);
if MyCompProperty <> nil then
Writer.WriteComponent(MyCompProperty);
end;
void __fastcall TSampleComponent::LoadCompProperty(TReader *Reader)
{
if (Reader->ReadBoolean())
MyCompProperty = Reader->ReadComponent(NULL);
}
void __fastcall TSampleComponent::StoreCompProperty(TWriter *Writer)
{
if (MyCompProperty)
{
Writer->WriteBoolean(true);
Writer->WriteComponent(MyCompProperty);
}
else
Writer->WriteBoolean(false);
}