AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

property listener

Ein Thema von svehei · begonnen am 24. Mär 2003 · letzter Beitrag vom 24. Mär 2003
Antwort Antwort
Seite 1 von 2  1 2      
svehei

Registriert seit: 10. Mär 2003
Ort: Bretten
54 Beiträge
 
Delphi 7 Professional
 
#1

property listener

  Alt 24. Mär 2003, 11:47
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
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
  Mit Zitat antworten Zitat
Touchdown

Registriert seit: 17. Feb 2003
227 Beiträge
 
#2
  Alt 24. Mär 2003, 12:25
Nehm einfach den Constructor von TMyList

Ist auch logischer und viel schöner ...
function getallfornothing: TGoldesel;
begin
result := TGoldesel.create;
end;
  Mit Zitat antworten Zitat
svehei

Registriert seit: 10. Mär 2003
Ort: Bretten
54 Beiträge
 
Delphi 7 Professional
 
#3
  Alt 24. Mär 2003, 12:32
???

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.
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#4
  Alt 24. Mär 2003, 12:51
Deine Lese-Methode getMeineListe (property MeineListe: TMyList read getMeineListe write setMeineListe informiert dich darüber wann auf das Objekt-Feld "MeineListe" zugegriffen wird...
Manuel Pöter
  Mit Zitat antworten Zitat
Minz

Registriert seit: 19. Dez 2002
476 Beiträge
 
#5
  Alt 24. Mär 2003, 12: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

[edit=Daniel B]Delphi-Tags gesetzt. MfG Daniel B.[/edit]
  Mit Zitat antworten Zitat
Touchdown

Registriert seit: 17. Feb 2003
227 Beiträge
 
#6
  Alt 24. Mär 2003, 12: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.
function getallfornothing: TGoldesel;
begin
result := TGoldesel.create;
end;
  Mit Zitat antworten Zitat
Minz

Registriert seit: 19. Dez 2002
476 Beiträge
 
#7
  Alt 24. Mär 2003, 12:57
öhm, des glob ich net unbedingt
  Mit Zitat antworten Zitat
svehei

Registriert seit: 10. Mär 2003
Ort: Bretten
54 Beiträge
 
Delphi 7 Professional
 
#8
  Alt 24. Mär 2003, 13:24
@Motzi

das wars, manchmal sieht man vor lauter wald eben die baeume nicht mehr das ich da nicht selber drauf gekommen bin
  Mit Zitat antworten Zitat
svehei

Registriert seit: 10. Mär 2003
Ort: Bretten
54 Beiträge
 
Delphi 7 Professional
 
#9
  Alt 24. Mär 2003, 13:28
@Minz

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

Registriert seit: 19. Dez 2002
476 Beiträge
 
#10
  Alt 24. Mär 2003, 13: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!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:14 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