Zitat von
Neutral General:
Kannst du mirs eventuell genauer erklären ?
Kannst Du nicht wie schon angedeutet die Hilfe lesen?
DefineProperties (Methode von TComponent)
Dort steht:
Zitat:
Die Methode DefineProperties legt Methoden fest, mit denen die nicht als published deklarierten Daten eines Objekts in einem Stream (z.B. in einer Formulardatei) gespeichert werden können.
Delphi-Syntax:
procedure DefineProperties(Filer: TFiler); override;
Beschreibung
TComponent überschreibt die in TPersistent definierte Methode DefineProperties, um Werte für die Eigenschaften Top und Left "vorzutäuschen". Auf diese Weise können Komponenten, die keine Steuerelemente sind, zur Entwurfszeit manipuliert werden. Die Eigenschaften Top und Left sind allerdings nicht als published deklariert, da solche Komponenten zur Laufzeit nicht auf dem Bildschirm sichtbar sind.
DefineProperties ist virtuell und kann somit von untergeordneten Klassen überschrieben werden. Wenn Sie die Methode DefineProperties überschreiben, beachten Sie, dass die Eigenschaft Ancestor von TFiler gesetzt sein könnte und dass diese Eigenschaft festlegen kann, ob Eigenschaften in den Stream geschrieben werden.
DefineProperties wird automatisch als Teil des Komponenten-Streaming-Systems aufgerufen. Rufen Sie die Methode nicht direkt auf.
Es gibt dort sogar ein Beispiel:
Zitat:
ReadBoolean, WriteBoolean, ReadComponent, WriteComponent, DefineProperties, DefineProperty, Ancestor (Beispiel)
Dieses Beispiel zeigt, wie eine als nicht published deklarierte Eigenschaft, deren Wert eine zur Laufzeit erzeugte Komponente ist, geladen und gespeichert wird. Die beiden Methoden LoadCompProperty und StoreCompProperty werden zum Laden und Speichern des Eigenschaftswerts definiert. Es wird auch die Methode DefineProperties überschrieben, in der diese beiden Routinen an das Streaming-System übergeben werden. Die Methode DefineProperties überprüft die Eigenschaft Ancestor von TFiler, damit kein Eigenschaftswert in geerbten Formularen gespeichert wird.
Delphi-Quellcode:
procedure TSampleComponent.LoadCompProperty(Reader: TReader);
begin
if Reader.ReadBoolean then
MyCompProperty := Reader.ReadComponent(nil);
end;
procedure TSampleComponent.StoreCompProperty(Writer: TWriter);
begin
Writer.WriteBoolean(MyCompProperty <> nil);
if MyCompProperty <> nil then
Writer.WriteComponent(MyCompProperty);
end;
procedure TSampleComponent.DefineProperties(Filer: TFiler);
function DoWrite: Boolean;
begin
if Filer.Ancestor <> nil then { Auf geerbten Wert prüfen }
begin
if TSampleComponent(Filer.Ancestor).MyCompProperty = nil then
Result := MyCompProperty <> nil
else if MyCompProperty = nil or
TSampleComponent(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 das Definieren von Eigenschaften ermöglichen }
Filer.DefineProperty('MyCompProperty', LoadCompProperty, StoreCompProperty, DoWrite);
end;
Wo ist Dein Problem?
Brauchst Du ein Tutorial wie man die Hilfe aufruft?
Ich bin nun im Wochenende, ... bis Montag.