Delphi-PRAXiS

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 Auf Objekte aus abgeleiteten Klassen zugreifen (https://www.delphipraxis.net/76458-auf-objekte-aus-abgeleiteten-klassen-zugreifen.html)

quso 4. Sep 2006 21:33


Auf Objekte aus abgeleiteten Klassen zugreifen
 
Hallo zusammen,

wie kann man ein (geerbtes) Objekt aus einer Vater-Klasse ansprechen? Leider bekomme ich bei folgendem Aufruf ein Fehlermeldung, dass der Bezeichner undefiniert ist:

Delphi-Quellcode:
type
TTabsheet_Rekl_Master= class(TTabSheet)
  private
  public
    constructor create(Aowner:TComponent);
  end;

  TTabsheet_KRekl= class(TTabsheet_Rekl_Master)
  private
  public
    constructor create(Aowner:TComponent);
  end;

implementation


constructor TTabsheet_Rekl_Master.create(Aowner:TComponent);
var
  gb_Headdata : TGroupBox;
...
begin
  inherited;
  gb_Headdata := TGroupBox.create(self);
  gb_Headdata.parent := self;
...
end;

constructor TTabsheet_KRekl.create(AOwner:TComponent);
var
  edt_WSO : TEdit;    
  lb_WSO : TLabel;
begin
  inherited;
  edt_WSO := TEdit.create(self);
  edt_WSO.parent := gb_Headdata; // <- Hier will die IDE nicht mehr weiter! Fehlermeldung: Undefinierter Bezeichner: gb_Headdata
...
end;

end.
Mit der Anweisung "inherited" rufe ich doch alle Objekt in der Vater-Klasse auf, die dann auch verfügber sein sollten? Oder?

P.S.: Die Klassen sind beide "lauffähig" (Ableitung natürlich nur ohne Erweiterung!). Die abgeleitete Klasse wird zur Laufzeit erzeugt.

3_of_8 4. Sep 2006 21:36

Re: Auf Objekte aus abgeleiteten Klassen zugreifen
 
1. Der Konstruktor muss überschrieben werden, mit override.
2. Es heißt inherited(AOwner) oder inherited Create(AOwner), da der geerbte Konstruktor ja einen Parameter erwartet.

Khabarakh 4. Sep 2006 21:47

Re: Auf Objekte aus abgeleiteten Klassen zugreifen
 
Zitat:

Zitat von 3_of_8
inherited(AOwner)

Ähm... nein.

@quso: Du versuchst, auf eine lokale Variable aus einer andereren Prozedur zuzugreifen. Das funktioniert weder mit noch ohne Ableitung. Deklariere gb_Headdata als Feld (entweder protected/public oder private mit Property).

Dax 4. Sep 2006 21:50

Re: Auf Objekte aus abgeleiteten Klassen zugreifen
 
Zitat:

Zitat von Khabarakh
Zitat:

Zitat von 3_of_8
inherited(AOwner)

Ähm... nein.

Ich präzisiere: stimmen Signatur des aktuellen Konstruktors und mindestens einem Konstruktor der Basisklasse überein, ist eine Auslassung des Konstruktornamens sowie der Parameter zulässig.

Khabarakh 4. Sep 2006 21:56

Re: Auf Objekte aus abgeleiteten Klassen zugreifen
 
Besser gesagt ist diese Aufrufform überhaupt nicht möglich ;) .
Dass sein Code funktioniert, weiß er ja schon selbst (deine Zusammenfassung schadet natürlich trotzdem nix :zwinker: ):
Zitat:

Die Klassen sind beide "lauffähig" (Ableitung natürlich nur ohne Erweiterung!).

quso 4. Sep 2006 22:02

Re: Auf Objekte aus abgeleiteten Klassen zugreifen
 
Danke an @Khabarakh und @DAX!

Und so funktioniert es:

Delphi-Quellcode:
type
TTabsheet_Rekl_Master= class(TTabSheet)
  private
  public    
    constructor create(Aowner:TComponent);
  protected
    gb_Headdata : TGroupBox;
  end;
...


constructor TTabsheet_Rekl_Master.create(Aowner:TComponent);
begin

...


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:33 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-2025 by Thomas Breitkreuz