カスタム バリアント値の読み込みと保存

提供: Appmethod Topics
移動先: 案内検索

カスタム バリアントのコピーと消去 への移動


デフォルトでは、カスタム バリアントが公開されたプロパティの値として割り当てられる場合、 そのプロパティがフォーム ファイルに保存される際に、文字列に型キャストされ、プロパティがフォーム ファイルから読み込まれる際に、文字列から元に型に変換されます。 ただし、カスタム バリアント値の読み込み/保存の独自のメカニズムを、もっと自然な形で提供することも可能です。 これを行うには、TCustomVariantType の下位クラスで、Classes.pas にある System.Classes.IVarStreamable インターフェイスを実装しなければなりません。

IVarStreamable では、2 つのメソッド StreamInStreamOut を、バリアントの値をストリームに対して読み書きするために定義しています。 たとえば、VarCmplx ユニットの TComplexVariantType は、次のように IVarStreamable メソッドを実装しています:

Object Pascal:
 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 オブジェクトを作成し、値の読み書きを、具体的に処理しているか注目してください。

関連項目