DefineProperties
ストリームとの間でバイナリデータのストリーミングを実行する独自のメソッドを記述し、およびを使用してそれらをVCL / RTLストリーミングシステムに登録することにより、プロパティを読み書きする独自のメソッドを作成できますDefineBinaryProperty
。JEDI JVCLユニットJVXSlider.pasには、わかりやすい例があります。
// interface
type
TJvCustomSlider=class(TJvCustomControl)
private
procedure ReadUserImages(Stream: TStream);
procedure WriteUserImages(Stream: TStream);
...
protected
procedure DefineProperties(Filer: TFiler); override;
// implementation
procedure TJvCustomSlider.DefineProperties(Filer: TFiler);
function DoWrite: Boolean;
begin
if Assigned(Filer.Ancestor) then
Result := FUserImages <> TJvCustomSlider(Filer.Ancestor).FUserImages
else
Result := FUserImages <> [];
end;
begin
// @RemyLebeau points out that the next line is apparently a bug
// in the JVCL code, and that inherited DefineProperties should always
// be called regardless of the type of Filer. Commented it out, but
// didn't delete it because it *is* in the JVCL code I cited.
//if Filer is TReader then
inherited DefineProperties(Filer);
Filer.DefineBinaryProperty('UserImages', ReadUserImages, WriteUserImages, DoWrite);
end;
procedure TJvCustomSlider.ReadUserImages(Stream: TStream);
begin
Stream.ReadBuffer(FUserImages, SizeOf(FUserImages));
end;
procedure TJvCustomSlider.WriteUserImages(Stream: TStream);
begin
Stream.WriteBuffer(FUserImages, SizeOf(FUserImages));
end;
Delphiストリーミングシステムは、必要に応じて、定義されたプロパティ(上記の例ではproperty UserImages
)に適切なメソッドを自動的に呼び出して、dfmファイルに自動的に保存したりdfmファイルから読み取ったりします。自分で呼び出す必要はありません。