Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi unterkategorie bei einer prozedur (https://www.delphipraxis.net/62988-unterkategorie-bei-einer-prozedur.html)

Amo 12. Feb 2006 13:06


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:
MyComponent.Sammlung.NummerEins
Ich komme nicht weiter als "MyComponent.Sammlung" . Was muss ich machen um bei Sammlung "weiterzukommen"?

idontwantaname 12. Feb 2006 13:23

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:
type
  TUnterObjekt = class(TObject)
  public
    procedure Dings1;
  end;

  TOberObjekt = class(TObject)
  public
    Sammlung: TUnterObjekt;
  end;
nur nicht vergessen, dass Unterobjekt im OnCreate des OberObjektes zu erzeuchen ;)


Aber ob diese variante so sinnvoll ist ?? :?

Amo 12. Feb 2006 13:37

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;

mkinzler 12. Feb 2006 13:39

Re: unterkategorie bei einer prozedur
 
Delphi-Quellcode:
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;
[Edit:] constructor sollte natürlich auch definiet werden[/Edit]

Amo 12. Feb 2006 13:50

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..

mkinzler 12. Feb 2006 14:04

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.

Amo 12. Feb 2006 14:38

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:
procedure TAmo.BlaBlaBla;
begin
  //alles was die prozedur machen soll
end;
Das geht ja jetzt nicht mehr, wenn DIESE prozedur zur "Sammlung" gehört. Also
- procedure TAmo.Sammlung.BlaBlaBla;
- procedure Sammlung.BlaBlaBla;
- procedure TSammlung.BlaBlaBla;
- procedure BlaBlaBla;
gehen alle nicht. Wie mache ich das denn hier?

mkinzler 12. Feb 2006 14:48

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:
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
...
nun kannst du sie mit
Delphi-Quellcode:
Amo.Sammlung.Blablabla;
aufrufen

Amo 12. Feb 2006 15:05

Re: unterkategorie bei einer prozedur
 
Guuut, das geht jetzt auch :-) *freu*

Jetzt wieder zum nächsten Problem.. :?

Delphi-Quellcode:
procedure TSammlung.BlaBlaBla;
begin
  AndereProzedur; // hier geht es wieder nicht
end;
"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").
Was jetzt?

mkinzler 12. Feb 2006 15:22

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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:39 Uhr.
Seite 1 von 2  1 2      

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