Einzelnen Beitrag anzeigen

Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.840 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

Re: [Eigene Property] Designtime->OK Runtime-> :|

  Alt 22. Sep 2006, 18:02
Zitat von Neutral General:
Kannst du mirs eventuell genauer erklären ?
Kannst Du nicht wie schon angedeutet die Hilfe lesen?

Delphi-Referenz durchsuchenDefineProperties (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.
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat