Die Methode DefineProperties überschreiben
Nach oben zu Nicht als "published" deklarierte Eigenschaften speichern und laden
Nachdem Sie die Methoden zum Speichern und Laden des Eigenschaftswerts erstellt haben, können Sie die Methode DefineProperties der Komponente überschreiben. Diese Methode wird von Delphi zum Laden und Speichern der Komponente aufgerufen. In der Methode DefineProperties müssen Sie die DefineProperty - bzw. die DefineBinaryProperty-Methode des aktuellen Filer-Objekts aufrufen und ihr die Methode übergeben, die zum Laden bzw. Speichern des Eigenschaftswerts verwendet werden soll. Wenn Sie zu diesem Zweck Methoden des Typs TWriterProc und TReaderProc definiert haben, rufen Sie die Methode DefineProperty des Filer-Objekts auf. Wenn Sie Methoden des Typs TStreamProc erstellt haben, rufen Sie DefineBinaryProperty auf.
An die Methode zur Definition der Eigenschaft übergeben Sie neben den Methoden zum Laden und Speichern des Eigenschaftswerts auch einen Booleschen Wert, der angibt, ob der Eigenschaftswert gespeichert werden muss. Das Speichern des Werts ist nicht erforderlich, wenn er abgeleitet wird oder wenn es sich um einen Standardwert handelt.
Bei Verwendung der LoadCompProperty-Methode des Typs TReaderProc und der StoreCompProperty-Methode des Typs TWriterProc kann DefineProperties folgendermaßen überschrieben werden:
procedure TSampleComponent.DefineProperties(Filer: TFiler);
function DoWrite: Boolean;
begin
if Filer.Ancestor <> nil then { Vorfahr auf zu erbenden Wert prüfen }
begin
if TSampleComponent(Filer.Ancestor).MyCompProperty = nil then
Result := MyCompProperty <> nil
else if (MyCompProperty = nil) or
(TMy5Comp(Filer.Ancestor).MyCompProperty.Name <> MyCompProperty.Name) then
Result := True
else Result := False;
end
else { Kein geerbter Wert -- auf Standardwert (nil) prüfen }
Result := MyCompProperty <> nil;
end;
begin
inherited; { Basisklassen können die Eigenschaften definieren }
Filer.DefineProperty('MyCompProperty', LoadCompProperty, StoreCompProperty, DoWrite);
end;
void __fastcall TSampleComponent::DefineProperties(TFiler *Filer)
{
// Basisklassen das Definieren ihrer Eigenschaften ermöglichen.
// TSampleComponent muss direkt von TComponent abgeleitet werden.
TComponent::DefineProperties(Filer);
bool WriteValue;
if (Filer->Ancestor) // Auf geerbten Wert prüfen
{
if ((TSampleComponent *)Filer->Ancestor)->MyCompProperty == NULL)
WriteValue = (MyCompProperty != NULL);
else if ((MyCompProperty == NULL) ||
(((TSampleComponent *)Filer->Ancestor)->MyCompProperty->Name !=
MyCompProperty->Name))
WriteValue = true;
else WriteValue = false;
}
else // Kein geerbter Wert - Eigenschaft schreiben, wenn nicht Null
WriteValue = (MyCompProperty != NULL);
Filer->DefineProperty("MyCompProperty ",LoadCompProperty,StoreCompProperty, WriteValue);
}