Vous pouvez créer vos propres méthodes pour lire et écrire les propriétés en écrivant vos propres méthodes pour effectuer le flux des données binaires vers et depuis un flux, et les enregistrer avec le système de flux VCL/RTL en utilisant DefineProperties
et DefineBinaryProperty
. Il y a un exemple facile à suivre dans l'unité 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 souligne que la ligne suivante est apparemment un bug
// dans le code JVCL, et que inherited DefineProperties devrait toujours
// être appelé quelle que soit le type de Filer. Commenté mais non supprimé
// car il est dans le code JVCL que j'ai mentionné.
//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;
Le système de flux Delphi appellera automatiquement les méthodes appropriées pour la propriété définie (dans l'exemple ci-dessus, la propriété UserImages
) au besoin pour sauvegarder ou lire automatiquement depuis le fichier DFM ; vous n'avez jamais besoin de les appeler vous-même.