Création de méthodes pour le stockage et le chargement de valeurs de propriétés

De RAD Studio
Aller à : navigation, rechercher

Remonter à Stockage et chargement des propriétés non publiées


Pour stocker et charger des propriétés non publiées, vous devez d'abord créer une méthode afin de stocker la valeur de propriété et une autre méthode pour la charger. Deux possibilités s'offrent à vous :

  • Créer une méthode de type TWriterProc afin de stocker la valeur de propriété et une méthode de type TReaderProc pour la charger. Cette approche vous permet de profiter des capacités intégrées de Delphi concernant l'enregistrement et le chargement de types simples. Si la valeur de votre propriété est construite à partir de types que Delphi sait enregistrer et charger, utilisez cette approche.
  • Créer deux méthodes de type TStreamProc, une pour stocker et une pour charger la valeur de propriété. TStreamProc accepte un flux comme argument et vous pouvez utiliser les méthodes du flux afin d'écrire et lire les valeurs de propriétés.

Prenons pour exemple une propriété représentant un composant créé à l'exécution. Delphi sait comment écrire cette valeur, mais ne le fait pas automatiquement car le composant n'est pas créé dans le Concepteur de fiches. Puisque le système de flux peut dès à présent charger et enregistrer des composants, vous pouvez utiliser la première approche. Les méthodes suivantes chargent et stockent le composant créé dynamiquement qui représente la valeur d'une propriété appelée MyCompProperty:

void __fastcall TSampleComponent::LoadCompProperty(TReader *Reader)
{
  if (Reader->ReadBoolean())
    MyCompProperty = Reader->ReadComponent(NULL);
}
void __fastcall TSampleComponent::StoreCompProperty(TWriter *Writer)
 {
  if (MyCompProperty)
  {
    Writer->WriteBoolean(true);
    Writer->WriteComponent(MyCompProperty);
  }
  else
    Writer->WriteBoolean(false);
}
void __fastcall TSampleComponent::LoadCompProperty(TReader *Reader)
{
  if (Reader->ReadBoolean())
    MyCompProperty = Reader->ReadComponent(NULL);
}
void __fastcall TSampleComponent::StoreCompProperty(TWriter *Writer)
{
  if (MyCompProperty)
  {
    Writer->WriteBoolean(true);
    Writer->WriteComponent(MyCompProperty);
  }
  else
    Writer->WriteBoolean(false);
}

Voir aussi