Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi property listener (https://www.delphipraxis.net/3656-property-listener.html)

svehei 24. Mär 2003 10:47


property listener
 
ich habe da ein problem mit einem eigenen klassen-framework. meine basisklasse habe ich von TObject abgeleitet.

in dieser klasse habe ich properties die wiederrum auf eine eigene klasse hinweisen die von tobjectlist abgeleitet ist und die wiederrum von eigenen objekttypen gefuellt wird.

Delphi-Quellcode:

  TMyObjekt= class(TObject)
  private
    ...
    FValue: String;
    function getValue: String;
    procedure setValue(value: String);
    ...
  protected
  public
    ...
    property Value: String read getValue write setValue;
    ...
  end;

  TMyList = class(TObjectList)
  private
  protected
    flist: TObjectList;
    function GetItems(index: integer): TMyObjekt;
    ...
  public
    ...
    function Add(Item: TMyObjekt): integer;
    function Count: integer;
    procedure Delete(index: integer);
    property Items[index: integer]: TMyObjekt read GetItems; default;
    ...
  end;
 
  Tklasse = class(TMeinObject)
  private
    { Private declarations }
    ...
    FMeineListe: TMyList;
    function getMeineListe: TMyList;
    procedure setMeineListe(MyList: TMyList);
    ...
  protected
    { Protected declarations }
  public
    { Public declarations }
    ...
    property MeineListe: TMyList read getMeineListe write setMeineListe;
    ...
  end;
wenn ich nun aus meiner application der liste ein objekt hinzufuegen moechte
Delphi-Quellcode:
FKlasse.MeineListe.Add(MeinObjekt);
dann bekomme ich nen fehler - sowit ist's logisch, ich muss die Liste erst erzeugen, bevor ich ihr was hinzufuegen kann.

jetzt kommt aber mein problem: es waere ganz einfach, wenn ich im constructor von TKlasse TMyList erzeugen wuerde. In diesem Fall wuerde aber bei jeder erzeugung von TKlasse TMyList angelegt, auch wenn TMyList kein Objekt hinzugefuegt wird -> ist von mir nicht erwuenscht.

Was ich also suche ist eine Art "property listener". wenn also die property MeineListe von irgendwoher benutzt wird (z.B. via Add) soll TKlasse das bemerken und die Liste erzeugen. gibts sowas schon oder hat vielleicht jemand eine idee wie ich das prob loesen kann.

im voraus schonmal vielen liebsten dank

sven

Touchdown 24. Mär 2003 11:25

Nehm einfach den Constructor von TMyList :mrgreen:

Ist auch logischer und viel schöner ... :dancer:

svehei 24. Mär 2003 11:32

??? :roll:

das ist mir schon klar. jedoch wo kann ich ihn aufrufen? ich greife doch von der applikation auf fklasse.MyList.Add(MyObjekt) zu - und um dies so zuzuordnen zu koennen muss ich den constructor von TMyList in TKlasse aufrufen.

also muss mir TKlasse sagen koennen wann auf das property MyList zugegriffen wird, damit ich den constructor von TMyList aufufen kann.

Motzi 24. Mär 2003 11:51

Deine Lese-Methode getMeineListe (property MeineListe: TMyList read getMeineListe write setMeineListe;) informiert dich darüber wann auf das Objekt-Feld "MeineListe" zugegriffen wird...

Minz 24. Mär 2003 11:52

Ich glaube in deiner MyList ist was doppeltgemoppelt!

Delphi-Quellcode:
TMyList = class(TObjectList)
  private
  protected
    flist: TObjectList;
    function GetItems(index: integer): TMyObjekt;
    ...
  public
    ...
    function Add(Item: TMyObjekt): integer;
    function Count: integer;
    procedure Delete(index: integer);
    property Items[index: integer]: TMyObjekt read GetItems; default;
    ...
end;
Wenn TMyList schon vom Typ TObjectList ist, ist es eigentlich
unnötig noch eine flist vom Typ TObjectList zu deklarieren.
Jede Instanz die du von TMyList instanziierst hat bereits alle
Fähigkeiten einer ObjectList, und damit auch die Fähigkeit
Objekte in einer Liste zu speichern! Oder steh ich grad auf dem
Schlauch? :?:

Zu deinem Problem:

mich würde interessieren Wie deine Deklaration zu FKlasse aussieht!

Minz

Da hat Motzi allerdings recht :mrgreen:

[edit=Daniel B]Delphi-Tags gesetzt. MfG Daniel B.[/edit]

Touchdown 24. Mär 2003 11:55

Etwas ist noch falsch.

FMeineListe: TMyList;

gehört nicht in die Tklasse sondern in die TMyList Klasse, diese wird im eigenen Constructor initialisiert. Auf diese Instanz einer Objectlist kannst du dann adden was du willst.

Minz 24. Mär 2003 11:57

öhm, des glob ich net unbedingt :mrgreen:

svehei 24. Mär 2003 12:24

@Motzi :spin: :hello:

das wars, manchmal sieht man vor lauter wald eben die baeume nicht mehr ;-) das ich da nicht selber drauf gekommen bin :oops:

svehei 24. Mär 2003 12:28

@Minz

das stimmt so schon, nur moechte ich eine explizite liste haben, in der per "add" nur meine eigenen objekttypen hinzugefuegt werden koennen.

Minz 24. Mär 2003 12:33

dazu hast du doch

function add...

darin kannst du doch dann die Objekte checken, die kommen und einen
entsprechenden Fehler ausgeben oder behandeln, so müsstest du das doch
auch bei flist machen!


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:02 Uhr.
Seite 1 von 2  1 2      

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