![]() |
Re: über Objekte einer Klasse iterieren
Also nocheinmal,
eine Klasse, die von TObject abgeleitet ist, bringt von Haus aus keine Möglichkeit mit, über alle ihr zugehörigen Objekte zu iterieren. Fazit: Man muss selber dafür sorgen, dass diese Funktionalität implementiert wird, wenn man sie denn wünscht. Für einige Klassen ist dieses bereits implmentiert worden. Beispielsweise für TForm und ihr Feld FComponents, wie bereits in #2 erläutert. FComponents ist vom Typ TList. In ihr werden sämtliche Componenten gespeichert, die auf der Instanz von TForm erzeugt werden. Edit: Ah, Rekursion in diesem Fall hat Luckie schon erläutert. |
Re: über Objekte einer Klasse iterieren
Zitat:
Die TForms-Klasse weiss aber auch nicht, wie viele Forms denn so rumfleuchen. Das geht auch gar nicht, weil eine Klasse keine Felder besitzen kann, die aber irgendwie für die Implementierung dieser Funktionalität von Nöten wäre. Erstelle Dir also einen Container für deine Objekte. Im Construktor fügst Du die Instanz in die Liste ein und im Destruktor wieder raus.
Delphi-Quellcode:
TPanelContainer = Class (TList) ...
... End; Var MyPanelContainer : TPanelContainer; TMyPanel = Class (TPanel) Constructor Create (aOwner : TComponent); Override; Destructor Destroy; ... End; Constructor TMyPanel.Create (aOwner : TComponent); Begin inherited; MyPanelContainer.Add (Self); ... end; Destructor TMyPanel.Destroy; Begin MyPanelContainer.Remove (Self); ... inherited End; |
Re: über Objekte einer Klasse iterieren
ich glaube alzaimar ist der erste der mich verstanden hat!!!
Danke!!! Ist genau das was ich brauche. |
Re: über Objekte einer Klasse iterieren
Hier noch mal ein kleines Tutorial dazu:
![]() |
Re: über Objekte einer Klasse iterieren
Zitat:
Die Form (Instanz der Klasse) weiß aber, was auf ihr liegt (Komponenten). Zitat:
Zitat:
Das ist doch genau das, was ich die ganze Zeit gesagt habe; in jedem der Beiträge oben habe ich gesagt, dass er es seiner Klasse beibringen muss. Was eine Liste (FComponents) der Container für TForm ist muss er sich für seine Klasse auch bauen. Und damit meinte ich genau das, was alzaimar mit seinem PanelContainer vorgeschlagen hat :!: :!: :!: Deutlicher kann man es wohl ohne Codebeispiel nicht erläutern. Und dass Du, BomberBB, mich nicht ohne Beispiel verstanden hast, tut mir leid. Deswegen musst Du allerdings nocch lange nicht allen anderen unterstellen, sie hätten Dich nicht verstanden :wall: |
Re: über Objekte einer Klasse iterieren
Zitat:
Wir wollen eine Klasse, die ihre Instanten automatisch in eine bestimmte Liste (achtung! Singleton!) schreibt und wieder entfernt. Der Unterschied zur Containerklasse TWinControl ist der: Ich kann ein Control (also ein potentielles Kind der TForm) instantiieren, ohne das es auf einer Form ist. Damit taucht es in keiner Controls-Liste auf. Wenn ich aber eine Instanz von TMyPanel erzeuge, dann taucht es in jedem Fall in einer Liste auf. Ansonsten gebe ich dir recht: Ich habe nur übersetzt, was Du schon vorher gesagt hast. |
Re: über Objekte einer Klasse iterieren
Upsi, habe vielleicht etwas zu harsch geantwortet.
Deine Erläuterung werde ich beim Mittagessen mal Revue passieren lassen - danke :wink: |
Re: über Objekte einer Klasse iterieren
Zitat:
|
Re: über Objekte einer Klasse iterieren
@s-off:
Zitat:
Zitat:
@alzaimar: DANKE. Funzt bestens!!! |
Re: über Objekte einer Klasse iterieren
Hallo Kollegen,
@s-off: Bitte weniger Vorwürfe was ein anderer falsch macht oder schreibt oder nicht liest und mehr konstruktive hilfe. @BomberBB: Self ist in Wirklichkeit ein Zeiger auf das Object selbst. Damit kannst du in jeder ObjectMethode das object selbst ansprechen. Mit einem typecast wie Pointer(Self) kannst du das auch nutzen ... z.b. in einer Liste abspeichern, etc ... Dass benutzt z.b. das Beiepisl von Alzaimar. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:16 Uhr. |
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 by Thomas Breitkreuz