Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Property Editor mit Array of Objects (https://www.delphipraxis.net/175299-property-editor-mit-array-objects.html)

mcbain 11. Jun 2013 15:12

Property Editor mit Array of Objects
 
Hallo,
ich schreibe derzeit eine eigene Komponente, in der es eine Eigenschaft gibt, die einen Property Editor öffnet.
Das Öffnen eines eigenen Formulares nachdem '...' gedrückt wurde, funktioniert bisher auch wunderbar, nur funktioniert es noch nicht so ganz mit der Über-/Rückgabe des Wertes.

Meine Eigenschaft:
TMyObjects = array of TMyobject

Damit etwas passiert, muss man ja die Edit Methode überschreiben:

Code:
...
procedure TMyEditor.Edit;
var lform: TMyForm;
begin
  lform := TMyForm.Create(nil);
  try
    //Übergabe des gesamten Inhalts an die korrespondierende Eigenschaft des Formulars
    lform.Items := TMyObjects(GetOrdValue);

   //Formular fügt Items hinzu oder entfernt welche
    lform.ShowModal;

     //Anschließend sollen die Items wieder im Property stehen
    SetOrdValue(lform.Items);
  finally
    FreeAndNil(lform);
  end
end;
...
Nur leider funktioniert das ganze nicht so wie gedacht. Meine Liste ist beim nächsten öffnen des Formulars wieder leer.
Wäre nett, wenn mir jemand nen Tip geben könnte wie ich das in den Griff bekommen könnte, bzw. besser machen könnte.

Vielen Dank.
Gruß
mc

Uwe Raabe 11. Jun 2013 15:29

AW: Property Editor mit Array of Objects
 
Array-Eigenschaften können nicht als published deklariert werden und vom Streaming-System daher nicht behandelt. Du muss also selber mittels DefineProperties für das Speichern und Laden sorgen.

Bummi 11. Jun 2013 22:33

AW: Property Editor mit Array of Objects
 
@UweRaabe ist das nicht verwandt mit Array of a custom class as a property

Uwe Raabe 12. Jun 2013 08:39

AW: Property Editor mit Array of Objects
 
@Bummi, psst! Wir wollen doch hier nicht unsere Quellen verraten :wink:

Aber es ist schon erstaunlich häufig, daß ähnliche Anfragen von verschiedenen Leuten in kurzem Abstand auf unterschiedlichen Plattformen gestellt werden.

Bummi 12. Jun 2013 09:20

AW: Property Editor mit Array of Objects
 
murphys law :)

mcbain 12. Jun 2013 09:46

AW: Property Editor mit Array of Objects
 
Vielen Dank für die Antworten.
Das heißt, wenn ich mir den Link http://stackoverflow.com/questions/1...-as-a-property anschaue, dass ich in meinem Property-Editor-Formular die Funktion WriteMyArray meiner Komponente aufrufen müsste, um Änderungen vorzunehmen?

Vielen Dank.
Gruß
mc

Uwe Raabe 12. Jun 2013 10:11

AW: Property Editor mit Array of Objects
 
Zitat:

Zitat von mcbain (Beitrag 1218349)
Das heißt, wenn ich mir den Link http://stackoverflow.com/questions/1...-as-a-property anschaue, dass ich in meinem Property-Editor-Formular die Funktion WriteMyArray meiner Komponente aufrufen müsste, um Änderungen vorzunehmen?

Nicht ganz. An welcher Stelle würdest du denn den Aufruf platzieren?

Wie ich in meiner Antwort beschrieben habe, musst du die Methoden ReadMyArray und WriteMyArray (die Namen sind willkürlich gewählt) implementieren und diese in DefineProperties als Parameter den DefineProperty-Aufruf mitgeben.

Es würde auch helfen, wenn du verstehst, was bei DefineProperties passiert, insbesondere wann und von wem es aufgerufen wird. Das Delphi-Streaming-System ist nicht mal eben in ein paar Worten erklärt.

stahli 12. Jun 2013 10:48

AW: Property Editor mit Array of Objects
 
Eine Alternative wäre evtl. die Verwendung von TCollection statt einem Array.
Das Speichern im Formular wird damit zumindest leichter.

Uwe Raabe 12. Jun 2013 12:27

AW: Property Editor mit Array of Objects
 
Zitat:

Zitat von stahli (Beitrag 1218356)
Eine Alternative wäre evtl. die Verwendung von TCollection statt einem Array.
Das Speichern im Formular wird damit zumindest leichter.

Das Bearbeiten in der IDE übrigens auch. Das wird auch in der anderen Antwort auf StackOverflow empfohlen. Grundsätzlich ist das auch wohl der bessere Ansatz, wenn man denn die Möglichkeit hat, die Klassenhierarchie entsprechend aufzubauen. Ist das aber nicht gegeben oder hat man andere Owner-Beziehungen oder <irgendeinen anderen Grund einsetzen, der mir gerade nicht einfällt> oder will man das Streaming-System wirklich verstehen, dann sollte man sich mit DefineProperties auseinandersetzen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:01 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz