![]() |
unterkategorie bei einer prozedur
Also, ich habe mir eine Komponente gemacht, die ich eben aufs formular ziehen kann. Diese hat nun einige funktionen und prozeduren. Bis dahin kein problem, funktioniert auch alles prima. Nur jetzt habe ich so 15 weitere prozeduren eingefügt, die alle eigentlich zusammengehören.
Jetzt das problem ;): Was muss ich machen um diese prozeduren so aufzurufen später:
Delphi-Quellcode:
Ich komme nicht weiter als "MyComponent.Sammlung" . Was muss ich machen um bei Sammlung "weiterzukommen"?
MyComponent.Sammlung.NummerEins
|
Re: unterkategorie bei einer prozedur
so wie du das meinst, funktioniert das nicht, du müsstest ein unterobjekt erstellen, und dieses als feld des hauptobjektes angeben, das unterobjekt beinhaltet dann die proceduren
Delphi-Quellcode:
nur nicht vergessen, dass Unterobjekt im OnCreate des OberObjektes zu erzeuchen ;)
type
TUnterObjekt = class(TObject) public procedure Dings1; end; TOberObjekt = class(TObject) public Sammlung: TUnterObjekt; end; Aber ob diese variante so sinnvoll ist ?? :? |
Re: unterkategorie bei einer prozedur
Und wie mache ich das mit dem create jetzt? das hier geht schon mal nicht:
Delphi-Quellcode:
procedure TOberObjekt.OnCreate;
begin create TUnterObjekt; end; |
Re: unterkategorie bei einer prozedur
Delphi-Quellcode:
[Edit:] constructor sollte natürlich auch definiet werden[/Edit]
type
TUnterObjekt = class(TObject) public procedure Dings1; end; TOberObjekt = class(TObject) public constructor create; Sammlung: TUnterObjekt; end; constructor TOberObjekt.Create; begin sammlung := TUnterObjekt.Create; end; |
Re: unterkategorie bei einer prozedur
"Incompatible types: 'TUnterObjekt' and 'Class Reference'"
und ich musste "constructor create" nach "Sammlung: TUnterObjekt" setzen, gab sonst noch mehr fehler.. |
Re: unterkategorie bei einer prozedur
Ich habe den Code mal in Delphi getestet, bei mir funktionier er ( bis auf die Tatsache das, wie du erwähnt hast der Konstruktor nach den Eigenschaften deklariert werden muss).
Poste mal den gesamten Code. |
Re: unterkategorie bei einer prozedur
Also ich habe gerade gemerkt was ich falsch gemacht hatte (ich hatte ".create" vergessen).
Also DAS problem wäre gelöst...jetzt gibt es aber noch mehr schwierigkeiten. :( Normalerweise habe ich dann die prozeduren (weiter unten im code) so aufgerufen und eben gesagt was die machen sollen: (die Unit heißt Amo)
Delphi-Quellcode:
Das geht ja jetzt nicht mehr, wenn DIESE prozedur zur "Sammlung" gehört. Also
procedure TAmo.BlaBlaBla;
begin //alles was die prozedur machen soll end; - procedure TAmo.Sammlung.BlaBlaBla; - procedure Sammlung.BlaBlaBla; - procedure TSammlung.BlaBlaBla; - procedure BlaBlaBla; gehen alle nicht. Wie mache ich das denn hier? |
Re: unterkategorie bei einer prozedur
Die Methode gehört dann in die (Unter-)Klasse. Da ich nicht weiß, wie die Unterklasse heißt nehme ich mal an sie heiße TSammlung dann müsste das Ganze so gemacht werden:
Delphi-Quellcode:
nun kannst du sie mit
type
TSammlung = class procedure BlaBlaBla; end; TAmo = class public Sammlung: TSammlung; constructor Create; end; ... var Amo: TAmo; ... implementation ... constructor TAmo.Create; begin Sammlung := TSammlung.Create; ... end; procedure TSammlung.BlaBlaBla; begin ...
Delphi-Quellcode:
aufrufen
Amo.Sammlung.Blablabla;
|
Re: unterkategorie bei einer prozedur
Guuut, das geht jetzt auch :-) *freu*
Jetzt wieder zum nächsten Problem.. :?
Delphi-Quellcode:
"AndereProzedur" soll wie ihr seht in TSammlung.BlaBlaBla ausgeführt werden. "AndereProzedur" wurde in TAmo deklariert. Das geht jetzt also nicht. Wenn ich anstelle von "AndereProzedur" jetzt "TAmo.AndereProzedur" eingebe will er das auch nicht ("This form of method call only allowed for class methods").
procedure TSammlung.BlaBlaBla;
begin AndereProzedur; // hier geht es wieder nicht end; Was jetzt? |
Re: unterkategorie bei einer prozedur
Du musst dem Unterobjekt eine Referenz auf seinen Eigentümer mitgeben.
1. Dazu mußt du die Klasse um eine Eigenschaft Owner erweitern. 2. Erstellen eines Konstruktor der diese Eigenschaft setzt. 3. Ändern des Konstruktors der Oberklasse. |
Re: unterkategorie bei einer prozedur
Damit benötigst du aber auch eine Forward-Deklaration einer der zwei Klassen. Wenn diese aber wirklich so verzahnt sind, macht es wenig Sinn, sie zu trennen.
|
Re: unterkategorie bei einer prozedur
Könnte mir bitte einer zeigen wie das geht? :oops:
Also wo ich was ändern muss |
Re: unterkategorie bei einer prozedur
Delphi-Quellcode:
type
TAmo = class; //forward Deklaration; TSammlung = class Owner: TObject; procedure BlaBlaBla; end; TAmo = class public Sammlung: TSammlung; constructor Create; end; ... var Amo: TAmo; ... implementation ... constructor TAmo.Create; begin Sammlung := TSammlung.Create( self); ... end; constructor TSammlung.Create(AOwner: TObject); begin Owner := AOwner; end; procedure TSammlung.BlaBlaBla; begin ... |
Re: unterkategorie bei einer prozedur
Hi. :hi:
Ich hätte mal eine Zwischenfrage. Warum gruppierst du die Methoden eigentlich? Der Aufwand steht doch imho in keinem Verhältnis zum Nutzen. |
Re: unterkategorie bei einer prozedur
Also da hast du echt recht. Ich habe einfach nicht gewusst wieviel aufwand es ist und, tja...
Naja, ich habe jetzt das problem so gelöst: ich habe diese prozedur, die in blablabla aufgerufen wird einfach unter Sammlung deklariert und es geht! Vielen vielen dank für die Hilfe!! :thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:12 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