Sérialisation
Les méthodes ReadComponent et WriteComponent de la classe abstraite TStream permettent de lire et d'écrire des composants avec leurs propriétés dans un flux. On peut ainsi utiliser les classes de flux TMemoryStream, TFileStream ou TStringStream par exemple, pour sérialiser des instances de toute classe descendant de TComponent.

L'exemple suivant écrit un composant TButton dans un flux mémoire, le relit par l'instruction ReadComponent(nil) qui construit un composant en se fondant sur les informations de type du flux et renvoie le composant qu'elle a créé. On obtient ici un copie du composant TButton qui est ensuite placé dans la fiche.

procedure TForm1.Button1Click(Sender: TObject);
// Ecriture et lecture dans un TMemoryStream
var
  Stream: TMemoryStream;
  Bouton: TButton;
begin
  Stream := TMemoryStream.Create;
  try
    // Ecrire le composant dans le flux
    Stream.WriteComponent(Button1);

    // Relire le composant en se positionnant d'abord au début du flux
    Stream.Position := 0;
    Bouton := TButton(Stream.ReadComponent(nil));
    Bouton.Left := Bouton.Left + 10;
    Bouton.Top := Bouton.Top + 10;

    // Le nouveau composant est inséré dans la fiche
    InsertControl(Bouton);
  finally
    Stream.Free;
  end;
end;

initialization
  RegisterClasses([TButton]);

Il nécessaire d'enregistrer les classes qui devront être relues depuis un flux, sinon on obtiendra une exception indiquant qu'une classe n'est pas enregistrée.

A suivre...

Début

Copyright © 2003 OBJECT-EVERYWHERE. Tous droits réservés | Bertrand Goetzmann