カスタム バリアント値の読み込みと保存
カスタム バリアントのコピーと消去 への移動
デフォルトでは、カスタム バリアントが公開されたプロパティの値として割り当てられる場合、
そのプロパティがフォーム ファイルに保存される際に、文字列に型キャストされ、プロパティがフォーム ファイルから読み込まれる際に、文字列から元に型に変換されます。 ただし、カスタム バリアント値の読み込み/保存の独自のメカニズムを、もっと自然な形で提供することも可能です。 これを行うには、TCustomVariantType
の下位クラスで、Classes.pas にある System.Classes.IVarStreamable インターフェイスを実装しなければなりません。
IVarStreamable
では、2 つのメソッド StreamIn
と StreamOut
を、バリアントの値をストリームに対して読み書きするために定義しています。 たとえば、VarCmplx ユニットの TComplexVariantType
は、次のように IVarStreamable
メソッドを実装しています:
Delphi:
procedure TComplexVariantType.StreamIn(var Dest: TVarData; const Stream: TStream);
begin
with TReader.Create(Stream, 1024) do
try
with TComplexVarData(Dest) do
begin
VComplex := TComplexData.Create;
VComplex.Real := ReadFloat;
VComplex.Imaginary := ReadFloat;
end;
finally
Free;
end;
end;
procedure TComplexVariantType.StreamOut(const Source: TVarData; const Stream: TStream);
begin
with TWriter.Create(Stream, 1024) do
try
with TComplexVarData(Source).VComplex do
begin
WriteFloat(Real);
WriteFloat(Imaginary);
end;
finally
Free;
end;
end;
これらのメソッドが、どのように Stream
パラメータに対して Reader または Writer オブジェクトを作成し、値の読み書きを、具体的に処理しているか注目してください。