Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Parent eines Objektes herausfinden (https://www.delphipraxis.net/145984-parent-eines-objektes-herausfinden.html)

MisterNiceGuy 11. Jan 2010 22:07


Parent eines Objektes herausfinden
 
Hi, ich hab schon das Forum durchsucht, bin aber nicht auf die Lösung gestoßen.

Mein Problem ist folgendes:
Ich habe in meinem Projekt dieses Struktur:
Delphi-Quellcode:
type TConfig = class(TObject)
   privat
      a:String;
      ConfigForm:TForm;
end;
Jetzt möchte ich wenn ich meine Form (ConfigForm) erstelle, den String "a" füllen.
Ich hätte gedacht, dass das ganze dann so gehen würde:
Delphi-Quellcode:
procedure ConfigForm.onCreate(...);
   (self.parent as TConfig).a := 'asd';
end;
Geht aber natürlich nicht. Auch mit (self.owner as TConfig).a komme ich nicht weiter.
Weiß jemand eine Lösung? :)

Danke schonmal!

mkinzler 11. Jan 2010 22:28

Re: Parent eines Objektes herausfinden
 
Versuch es mal mit Sender

MisterNiceGuy 11. Jan 2010 22:33

Re: Parent eines Objektes herausfinden
 
Sender hat weder Parent noch Owner, geht also leider auch nicht.

Mensch, dachte das wäre einfacher... :)

Lumikki 11. Jan 2010 22:34

Re: Parent eines Objektes herausfinden
 
Warum schreibst du (self.parent as TConfig) davor?
Wenn du das Object erzeugt hast und in dieser Ebene quasi arbeitest, musst du doch gar nichts davor schreiben. Die Variable ist doch innerhalb der Klasse deklariert.
Also einfach
a:= '...';
oder täusch ich mich da?
Allerdings hab ich bis jetzt bei der Erzeugung neuer Klassen immer nur visuelle Komponenten benutzt, (zB ein Panel abgeleitet,) bei denen man dann im Constructor direkt einen parent angeben musste, um das Objekt sichtbar zu machen. Ich weiß nicht wie das bei dir ist.

Liebe grüße =)

edit: Sender... also brauch die Variable irgendeinen Vorsatz? *interessiert ist*

MisterNiceGuy 11. Jan 2010 22:38

Re: Parent eines Objektes herausfinden
 
Ne, wenn ich nur "Parent" schreibe, arbeite ich eine Ebene zu tief.

s.h.a.r.k 11. Jan 2010 22:42

Re: Parent eines Objektes herausfinden
 
Was zum Teufel machst du da? ConfigForm kennt keinerlei Instanz von TConfig, außer du hast eine Variable in ConfigForm, der du eine Referenz übergeben kannst. Das sinnvollste wäre, dass du TForm erweiterst, entweder um eine Referenz-Variable oder um eine entsprechende Methode.

Oder du gibst TConfig ein Handle mit und schickst aus ConfigForm eine Nachricht.

Aber das was du vor hast geht so nicht.

MisterNiceGuy 11. Jan 2010 22:54

Re: Parent eines Objektes herausfinden
 
Das ist doch mal eine Aussage! Alles klar, dann geb ich der Form eine Referenz auf das Parentobjekt mit.
Danke!

Sir Rufo 11. Jan 2010 23:08

Re: Parent eines Objektes herausfinden
 
Aber das ist doch auch irgendwie nix ...

Warum erstellst du nicht einen Nachfahren von TForm und packst dort eine Eigenschaft rein:
Delphi-Quellcode:
type
  TConfigForm = class( TForm )
    private
      FInfoFuerParent : string;
    public
      property InfoFuerParent : string read FInfoFuerParent write FInfoFuerParent;
    end;
Und alle Forms, die du dann haben möchtest leitest du wiederum von dieser Klasse ab.
Delphi-Quellcode:
type
  TEineTolleForm = class( TConfigForm )
  end;
Jetzt zu deiner Ausgangsklasse:
Delphi-Quellcode:
type
  TConfig = class(TObject)
    privat
      // a : String; Braucht kein Mensch mehr
      ConfigForm : TConfigForm;
  end;
Innerhalb der Klasse TConfig kannst du jetzt auf die Eigenschaft zugreifen:
Delphi-Quellcode:
ConfigForm.InfoFuerParent

s.h.a.r.k 11. Jan 2010 23:10

Re: Parent eines Objektes herausfinden
 
Aber evtl. brauch er diese Variable als Property oder dergleichen? Oder hat diese eben *beabsichtigt* dort angelegt. Wobei dein Rat nicht missachten ist! :thumb:

Sir Rufo 11. Jan 2010 23:18

Re: Parent eines Objektes herausfinden
 
Zitat:

Zitat von s.h.a.r.k
Aber evtl. brauch er diese Variable als Property oder dergleichen? Oder hat diese eben *beabsichtigt* dort angelegt. Wobei dein Rat nicht missachten ist! :thumb:

Wer hindert ihn daran, dass als property zu veröffentlichen?
Delphi-Quellcode:
type
  TConfig = class(TObject)
    privat
      // a : String; Braucht kein Mensch mehr
      ConfigForm : TConfigForm;
      function GetInfo : string;
      procedure SetInfo( Value : string );
    public
      property Info : string read GetInfo write SetInfo;
  end;

function TConfig.GetInfo : string;
  begin
    RESULT := ConfigForm.InfoFuerParent;
  end;

procedure TConfig.SetInfo( Value : string );
  begin
    ConfigForm.InfoFuerParent := Value;
  end;
Ich nicht, und Delphi schon mal garnicht :mrgreen:

s.h.a.r.k 11. Jan 2010 23:24

Re: Parent eines Objektes herausfinden
 
Was ist aber, wenn er keine Instanz von dieser Form hat und die Variable benötigt? :mrgreen: Ich finde immer eine Lücke *lach*

Sir Rufo 11. Jan 2010 23:28

Re: Parent eines Objektes herausfinden
 
Zitat:

Zitat von s.h.a.r.k
Was ist aber, wenn er keine Instanz von dieser Form hat und die Variable benötigt? :mrgreen: Ich finde immer eine Lücke *lach*

u got me :mrgreen:
Jetzt mit AutoCreate der Form ... ist zwar auch sinnentleert, aber dann kann was zugewiesen werden
Delphi-Quellcode:
type
  TConfig = class(TObject)
    privat
      // a : String; Braucht kein Mensch mehr
      ConfigForm : TConfigForm;
      function GetInfo : string;
      procedure SetInfo( Value : string );
    public
      property Info : string read GetInfo write SetInfo;
  end;

function TConfig.GetInfo : string;
  begin
    if not Assigned( ConfigForm ) then
      ConfigForm := TConfigForm.Create( nil );
    RESULT := ConfigForm.InfoFuerParent;
  end;

procedure TConfig.SetInfo( Value : string );
  begin
    if not Assigned( ConfigForm ) then
      ConfigForm := TConfigForm.Create( nil );
    ConfigForm.InfoFuerParent := Value;
  end;
Eine Form, nur als Variablenspeicher ist auch ganz nett, gelle

s.h.a.r.k 11. Jan 2010 23:31

Re: Parent eines Objektes herausfinden
 
[OT] Ich glaube wir verwirren den Thread-Ersteller hierdurch eher mehr :zwinker: Aber es ist durchaus kein schlechtes Beispiel für OOP. [/OT]

Sir Rufo 11. Jan 2010 23:41

Re: Parent eines Objektes herausfinden
 
Zitat:

Zitat von s.h.a.r.k
[OT] Ich glaube wir verwirren den Thread-Ersteller hierdurch eher mehr :zwinker: Aber es ist durchaus kein schlechtes Beispiel für OOP. [/OT]

Die Lösung hat er ja ... (do u want to know more?) ... dann kann er weiterlesen ;)

MisterNiceGuy 18. Jan 2010 13:52

Re: Parent eines Objektes herausfinden
 
Ich hab mir jetzt wie Rufo vorgeschlagen hat nen Hilfsrecord erstellt in den ich meine Infos vom Parentobjekt packe. Ist zwar nicht schön, aber funktioniert.

Finds aber total mies, dass sowas nicht geht! Also, dass man von nem Child nicht auf's Parentobjekt kommt. So geht meine ganze Idee mit ner Baumstruktur im Projekt den Bach runter!

Sir Rufo 18. Jan 2010 19:47

Re: Parent eines Objektes herausfinden
 
Was hat denn die in #1 beschriebene Fragestellung mit einer Baumstruktur zu tun?

Es ist überhaupt kein Problem eine Baumstruktur (auch mit Zugriffen auf die Vorfahren) zu erstellen.

Man muss es nur richtig machen ...
aber um es richtig zu machen, muss man auch mehr zum Kontext wissen
als nur ein klitzekleines Stücken.

Denn oft muss man einen völlig anderen Weg nehmen, als den, den man gerade beschreitet.

Damit du verstehst wie ich meine:

Zitat:

Zitat von ich
Wie kann ich das Glas von einer Ampelanlage austauschen? Hat das schon mal einer gemacht. Ist irgendwie total unpraktisch. Need Help!

Zitat:

Zitat von ihr
Seit wann hast du denn eine Ampel?

Zitat:

Zitat von ich
Nee, ich habe keine Ampel, aber wenn ich in die Stadt gehe, da ist so eine

Zitat:

Zitat von ihr
Kannste vergessen, das darf man nicht

Zitat:

Zitat von ich
Mist, ich dachte das geht ganz einfach

Zitat:

Zitat von ihr
Warum willst du da überhaupt was umtauschen?

Zitat:

Zitat von ich
Na das Teil ist immer rot, und da dachte ich, ich tausche mal die Gläser, dann hätte ich ja grün

Zitat:

Zitat von ihr
Mann, dann drück halt mal auf den Knopf an der Ampel, dann wird die auch grün

Zitat:

Zitat von ich
Das geht ja einfacher als ich dachte



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