Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   wie auf die properies vom Eltern Object zugreifen (https://www.delphipraxis.net/197864-wie-auf-die-properies-vom-eltern-object-zugreifen.html)

Kostas 12. Sep 2018 15:44

wie auf die properies vom Eltern Object zugreifen
 
Ich habe eine Elternklasse "TFahrzeug" die wiederum private Kind-Objekte "TProtokoll1" und "TProtokoll2" hat.
Je nach Bedarf werden die Kinder zeugt. :-)
Jetzt möchte das Kind-Object der Klasse TProtokoll1 auf die Propertys der Elternklasse zugreifen. Wie geht das bitte. Siehe letzt Methode.


Delphi-Quellcode:
type
  TProtokoll1 = class
    private
      FEigenesFeld: integer;
      procedure EmpfangVerarbeiten;
  end;

type
  TProtokoll2 = class
    private
      FEigenesFeld: integer;
      procedure EmpfangVerarbeiten;
  end;


type
  TFahrzeug = class
    private
      FKennzeichen: String;
      FProtokoll1: TProtokoll1;
      FProtokoll2: TProtokoll2;
      procedure EmpfangVerarbeiten;
      procedure SetKennzeichen(aKennzeichen:String);
    public
      property Kennzeichen: String read FKennzeichen write SetKennzeichen;
  end;


procedure TFahrzeug.EmpfangVerarbeiten;
begin
  if Data[1] = #1 then
  begin
    if not Assigned(FProtokoll1)
    then FProtokoll1 := TProtokoll1.Create;

    FProtokoll1.EmpfangVerarbeiten;
   
  end;
end;


procedure TProtokoll1.EmpfangVerarbeiten;
begin
  wie auf das Eltern object Fahrzeug zugreifen um das property Fahrzeug.Kennzeichen zu setzen?
end;
Gruß Kostas

Hobbycoder 12. Sep 2018 15:50

AW: wie auf die properies vom Eltern Object zugreifen
 
TProtokoll1 und TProtokoll2 sind Property.
Diese sollten im Create der Klasse TFahrzeug erzeugt und im Destroy der Klasse TFahrzeug auch wieder freigegeben werden.

Wenn du Daten von TFahrzeug im TProtokoll1 oder TProtokoll2 zur Verfügung haben möchtest, dann muss TFahrzeug diese an TProtokoll vorher übergeben. Holen geht nicht.
Du könntest diese Daten in der Methode TProtokoll1.EmpfangVerarbeiten(FKennzeichen: string);, die du ja in TFahrzeug aufrufst, übergeben.

Delphi-Quellcode:
type
   TProtokoll1 = class
     private
       FEigenesFeld: integer;
       procedure EmpfangVerarbeiten(Kennzeichen: string);
   end;

type
   TProtokoll2 = class
     private
       FEigenesFeld: integer;
       procedure EmpfangVerarbeiten(Kennzeichen: string);
   end;


type
   TFahrzeug = class
     private
       FKennzeichen: String;
       FProtokoll1: TProtokoll1;
       FProtokoll2: TProtokoll2;
       procedure EmpfangVerarbeiten;
       procedure SetKennzeichen(aKennzeichen:String);
     public
       property Kennzeichen: String read FKennzeichen write SetKennzeichen;
   end;


procedure TFahrzeug.EmpfangVerarbeiten;
begin
   if Data[1] = #1 then
   begin
     if not Assigned(FProtokoll1)
     then FProtokoll1 := TProtokoll1.Create;

     FProtokoll1.EmpfangVerarbeiten(FKennzeichen);
     
   end;
end;


procedure TProtokoll1.EmpfangVerarbeiten(Kennzeichen: string);
begin
   Hier kann du jetzt auf Kennzeichen zugreifen
end;

himitsu 12. Sep 2018 15:51

AW: wie auf die properies vom Eltern Object zugreifen
 
TProtokoll1/2 müssen ein Feld: TFahrzeug besitzten, das wird beim Erstellen (eigener Contructor mit TFahrzeug-Parameter) oder kurz nach dem Erstellen von dessen Ersteller (Eltern) gesetzt/zugewiesen, also Self übergeben.

Hobbycoder 12. Sep 2018 15:56

AW: wie auf die properies vom Eltern Object zugreifen
 
Gut, sowas kann man auch machen.

Aber ich habe es mir angewöhnt nur die Daten zu übergeben, die auch in der Funktion benötigt werden. Auch der Übersichtlichkeit wäre das dienlich.

Kostas 12. Sep 2018 15:58

AW: wie auf die properies vom Eltern Object zugreifen
 
Zitat:

Zitat von Hobbycoder (Beitrag 1413046)
TProtokoll1 und TProtokoll2 sind Property.
Diese sollten im Create der Klasse TFahrzeug erzeugt und im Destroy der Klasse TFahrzeug auch wieder freigegeben werden.

Könnte ich schon machen, aber es ist nicht sicher ob TProtokoll1 und TProtokoll2 oder beide benötigt werden. Deshalb dachte ich, ich erzeuge sie dynamisch und muss beim Destroy von TFahrzeug natürlich prüfen ob es assignet wurde. Oder gibt es einen Grund warum ich immer beide erzeugen sollte?

Gruß Kostas

Kostas 12. Sep 2018 16:00

AW: wie auf die properies vom Eltern Object zugreifen
 
Zitat:

Zitat von himitsu (Beitrag 1413047)
TProtokoll1/2 müssen ein Feld: TFahrzeug besitzten, das wird beim Erstellen (eigener Contructor mit TFahrzeug-Parameter) oder kurz nach dem Erstellen von dessen Ersteller (Eltern) gesetzt/zugewiesen, also Self übergeben.

Perfekt, genau das habe ich übersehen.

Dankeschön.

Gruß Kostas

Kostas 12. Sep 2018 16:11

AW: wie auf die properies vom Eltern Object zugreifen
 
Hallo himitsu,

ich habe die Fahrzeugklasse in einer Unit und die einzelnen Protokolle ebenfalls in separate Units.
Jetzt muss ich im Interface Teil für Fahrzeuge und Protokolle die jeweils andere Unis per uses einbinden.
Das funktioniert natürlich nicht. muss ich in diesem Fall die Fahrzeugklasse und die Protokoll Klassen in einer Unit zusammenführen oder gibt es doch eine elegantere Möglichkeit. Ich hätte sie gerne getrennt.

Gruß Kostas

Lemmy 12. Sep 2018 16:25

AW: wie auf die properies vom Eltern Object zugreifen
 
Zitat:

Zitat von Kostas (Beitrag 1413051)
ich habe die Fahrzeugklasse in einer Unit und die einzelnen Protokolle ebenfalls in separate Units.
Jetzt muss ich im Interface Teil für Fahrzeuge und Protokolle die jeweils andere Unis per uses einbinden.
Das funktioniert natürlich nicht. muss ich in diesem Fall die Fahrzeugklasse und die Protokoll Klassen in einer Unit zusammenführen oder gibt es doch eine elegantere Möglichkeit. Ich hätte sie gerne getrennt.

aus dem Grund würde ich das nicht machen. Übergebe TProtokoll lieber ein Event, das die jeweilige Instanz feuern kann und das neue Kennzeichen (oder whatever) an die Elternklasse übergeben kann, dann sind die "unabhängig" voneinander.

zudem würde ich TProtokoll1/TProtokoll2, wenn diese in Fahrzeug an unterschiedlichen Stellen Verwendung finden, eher in eine TProtokollX (Namen sind Schall und Rauch und sollen nur zur Veranschaulichung dienen :-)) auslagern und dort dann entscheiden, welche konkrete TProtokoll du instanziieren musst.
GRüße

himitsu 12. Sep 2018 18:56

AW: wie auf die properies vom Eltern Object zugreifen
 
Zitat:

Zitat von Hobbycoder (Beitrag 1413048)
Gut, sowas kann man auch machen.

Aber ich habe es mir angewöhnt nur die Daten zu übergeben, die auch in der Funktion benötigt werden.

Und nun rate mal, was du für deine gewünschte Funktion benötigst. :stupid:

Ausnahmen:
* Deine Klassen sind von TComponent abgeleitet und du verwendest dort beim Erstellen deine Überkomponente als Owner (was man da auch so machen sollte), dann kannst du auch den Owner nehmen, auf des gewünschten Typ casten und verwenden. (so mancher baut ein eigenes Property oder überschrteibt das Owner-Property und verwendet dort den Zieltypen)
* und es gibt bei einigen Listentypen bereits en Feld/Property, in welchem die Owner-Komponente (die Liste) von Delphi gespeichert ist

Hobbycoder 13. Sep 2018 06:54

AW: wie auf die properies vom Eltern Object zugreifen
 
Zitat:

Zitat von himitsu (Beitrag 1413058)
Zitat:

Zitat von Hobbycoder (Beitrag 1413048)
Gut, sowas kann man auch machen.

Aber ich habe es mir angewöhnt nur die Daten zu übergeben, die auch in der Funktion benötigt werden.

Und nun rate mal, was du für deine gewünschte Funktion benötigst. :stupid:

Hm...ausgehend vom ersten Post....nur das Kennzeichen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:40 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