AGB  ·  Datenschutz  ·  Impressum  







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

über Objekte einer Klasse iterieren

Ein Thema von Bomberbb · begonnen am 27. Sep 2007 · letzter Beitrag vom 28. Sep 2007
Antwort Antwort
Seite 2 von 3     12 3      
s-off
(Gast)

n/a Beiträge
 
#11

Re: über Objekte einer Klasse iterieren

  Alt 27. Sep 2007, 11:05
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.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#12

Re: über Objekte einer Klasse iterieren

  Alt 27. Sep 2007, 11:25
Zitat von s-off:
Für einige Klassen ist dieses bereits implmentiert worden. Beispielsweise für TForm und ihr Feld FComponents, wie bereits in #2 erläutert.
Das Eine hat doch nichts mit dem Anderen zu tun. Wincontrols können als Container fungieren und stelln deshalb logischerweise Funktionalitäten bereit, die es ermöglichen, durch den Container zu iterieren. Das betrifft jedoch andere Objekte, die auf ihr drauf liegen, aber nicht die Form selbst...

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;
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Bomberbb

Registriert seit: 23. Sep 2003
227 Beiträge
 
#13

Re: über Objekte einer Klasse iterieren

  Alt 27. Sep 2007, 11:28
ich glaube alzaimar ist der erste der mich verstanden hat!!!
Danke!!! Ist genau das was ich brauche.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#14

Re: über Objekte einer Klasse iterieren

  Alt 27. Sep 2007, 11:30
Hier noch mal ein kleines Tutorial dazu: http://www.michael-puff.de/Developer...er_Klassen.php
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#15

Re: über Objekte einer Klasse iterieren

  Alt 27. Sep 2007, 11:41
Zitat von alzaimar:
Zitat von s-off:
Für einige Klassen ist dieses bereits implmentiert worden. Beispielsweise für TForm und ihr Feld FComponents, wie bereits in #2 erläutert.
Das Eine hat doch nichts mit dem Anderen zu tun. Wincontrols können als Container fungieren und stelln deshalb logischerweise Funktionalitäten bereit, die es ermöglichen, durch den Container zu iterieren. Das betrifft jedoch andere Objekte, die auf ihr drauf liegen, aber nicht die Form selbst...
Wieso hat das eine mit dem anderen nichts zu tun?
Die Form (Instanz der Klasse) weiß aber, was auf ihr liegt (Komponenten).

Zitat von alzaimar:
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.
Das habe ich doch auch gar nicht behauptet. Aber eine Instanz von TForm weiß, wieviele Komponenten auf ihr 'rumfleuchen'

Zitat von alzaimar:
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.
Spreche ich chinesisch
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
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#16

Re: über Objekte einer Klasse iterieren

  Alt 27. Sep 2007, 11:53
Zitat von s-off:
Wieso hat das eine mit dem anderen nichts zu tun?
Das eine ist ein Container, das Andere eine Liste von Objekten. Na klar ist ein Container eine Liste von Objekten, aber hier (TForm) haben wir eine übergeordnete Klasse, die ihre Kinder verwaltet. Das ist aber nicht erwünscht.
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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#17

Re: über Objekte einer Klasse iterieren

  Alt 27. Sep 2007, 11:56
Upsi, habe vielleicht etwas zu harsch geantwortet.
Deine Erläuterung werde ich beim Mittagessen mal Revue passieren lassen - danke
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#18

Re: über Objekte einer Klasse iterieren

  Alt 27. Sep 2007, 12:02
Zitat von s-off:
Upsi, habe vielleicht etwas zu harsch geantwortet.
Na ja, geht aber schon wieder.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Bomberbb

Registriert seit: 23. Sep 2003
227 Beiträge
 
#19

Re: über Objekte einer Klasse iterieren

  Alt 27. Sep 2007, 12:17
@s-off:
Zitat:
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 ouch!
Du sprichst von:
Zitat:
FComponents ist vom Typ TList. In ihr werden sämtliche Componenten gespeichert, die auf der Instanz von TForm erzeugt werden.
das wollte ich auch nicht haben. Ich wollte über alle Intanzen einer Klasse iterieren. Ob ich das jetzt schlecht erklärt habe oder ob das nicht so verstanden wurde wie ich das meinte kann man unter Komunikationsprobleme abhaken. Ist für mich aber lange kein Grund für den Umgangston aus #15.

@alzaimar:

DANKE. Funzt bestens!!!
  Mit Zitat antworten Zitat
Benutzerbild von peschai
peschai

Registriert seit: 15. Feb 2004
Ort: Göppingen
270 Beiträge
 
Delphi XE5 Professional
 
#20

Re: über Objekte einer Klasse iterieren

  Alt 27. Sep 2007, 12:39
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.
Peter Schaible
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 08:18 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