Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Parent herausfinden (https://www.delphipraxis.net/75841-parent-herausfinden.html)

Neutral General 25. Aug 2006 19:38


Parent herausfinden
 
Hi,

Ist es möglich das Parent einer Klasse herauszubekommen ohne das die Klasse eine (funktionierende) Parent property hat?
Das muss doch möglich sein!

Ach ja meine Klasse hat kein Handle :|

Gruß
Neutral General

mkinzler 25. Aug 2006 19:53

Re: Parent herausfinden
 
Was meinst du mit Parent?
Wenn sie keine Parent Property hat oder diese keine wert hat, dann hat sie auch keinen Parent.

Neutral General 25. Aug 2006 19:55

Re: Parent herausfinden
 
natürlich:

Bsp:

Delphi-Quellcode:
TBla = class
 private
 
 public
  ASubClass: TSubClass;
end;

var Bla: TBla;
so Bla.ASubClass hat auch kein Parent aber das Parent von Bla.ASubClass ist Bla.
Und ich will an Bla ran! :| Versteht ihr ?

Gruß
Neutral General

Chewie 25. Aug 2006 19:56

Re: Parent herausfinden
 
Was verstehst du unter dem Parent? Die Vater-Kind-Beziehung existiert in der VCL als Entwurfsentscheidung, Klassen allgemein haben aber keinen Vater. Wenn in der Bibliothek, die du verwendest, so eine Vater-Kind-Beziehung vorhanden ist, wird es eine Möglichkeit geben, diese zu erfahren (ob die jetzt Parent oder sonstwie heißt), anderenfalls gibt es ganz einfach keine.

Neutral General 25. Aug 2006 20:00

Re: Parent herausfinden
 
Es sieht halt so aus das ich ein Sprite hab.

und

Sprite.Parent = TSpriteEngine

leider hat TSpriteEngine kein richtiges Parent. Aber das "falsche Parent" wäre TDXSpriteEngine

von TDXSpriteEngine könnte ich mit der Eigenschaft DXDraw.Parent aufs Formular zugreifen.

Also ich muss mich von meinem Sprite bis hoch zu TForm parenten!


EDIT: Das könnte ich eventuell noch lösen indem ich TSpriteEngine verändere aber das wäre wohl alles andere als schön..

Gruß
Neutral General

Chewie 25. Aug 2006 20:02

Re: Parent herausfinden
 
Dann musst du halt die Klasse TSpriteEngine um diese Information erweitern oder die Information sonstwie speichern.
Was nirgendwo gespeichert ist, wirst du auch auf keine Art der Welt abrufen können.

mkinzler 25. Aug 2006 20:03

Re: Parent herausfinden
 
Was du meinst ist kein Parent, sondern eine Superklasse.

Neutral General 25. Aug 2006 20:04

Re: Parent herausfinden
 
Naja aber das soll mal ne Art Komponente werde die auch andere benutzen können sollen und dann kann ich ja bei der Installation nicht dazuschreiben: "Außerdem müssen sie vor der Installation die Klasse TSpriteEngine wie folgt ändern: ..." :(

Und wie bekomme ich die Superklasse?

mkinzler 25. Aug 2006 20:06

Re: Parent herausfinden
 
Zitat:

Und wie bekomme ich die Superklasse?
Müßte über RTTI ermittelbar sein.

Neutral General 25. Aug 2006 20:07

Re: Parent herausfinden
 
Zitat:

Zitat von mkinzler
Zitat:

Und wie bekomme ich die Superklasse?
Müßte über RTTI ermittelbar sein.

1. RTTI ? :|
2. Code beispiel wäre nett :)

Gruß
Neutral General

Chewie 25. Aug 2006 20:12

Re: Parent herausfinden
 
Wenn dir TSpriteEngine (was auch immer das ist) nicht genügt, dann lass eine Klasse von dieser erben und schreib da rein, was du brauchst.

WO ist das Problem?

Neutral General 25. Aug 2006 20:13

Re: Parent herausfinden
 
Das die Komponente namens TDXSpriteEngine eine TSpriteEngine benutzt und wenn ich dann ne neue TSpriteEngine mache müsste ich auch ne neue TDXSpriteEngine machen...

Und ich will ja nicht die halben DelphiX Komponenten neu programmieren :?

fkerber 25. Aug 2006 20:15

Re: Parent herausfinden
 
Hi!

Naja, du müsstest sie ja nur ableiten und die Parent-Eigenschaft hinzuzufügen....


Ciao, Frederic

Neutral General 25. Aug 2006 20:17

Re: Parent herausfinden
 
Ja aber schau mal

Delphi-Quellcode:
TDXSpriteEngine = class(Wasweißichjetzt)
..
public
 Engine: TSpriteEngine;
end;
Und das ist eine Komponente... dh ich müsste auch TDXSpriteEngine verändern oder neu ableiten. Und wie gesagt ich wollte eine Komponente schreiben wo der der sie verwenden will nicht noch sein halbes DelphiX umschreiben muss :|

Chewie 25. Aug 2006 20:23

Re: Parent herausfinden
 
Wenn du von TSpriteEngine ableitest, dann sind doch Objekte dieser Klasse auch ansprechbar als Objekte vom Typ TSpriteEngine (das ist ja ein Prinzip der OOP). Du musst nur die Stelle, an der das Feld Engine erzeugt wird, ändern und die abgeleitete Klasse selbst, sonst nichts.

Neutral General 25. Aug 2006 20:26

Re: Parent herausfinden
 
Ja aber wie gesagt: Das ist doch total unschön. Wenn ich meine Klasse/Komponente hier in der DP mal anbiete. Ihr werdet mir den Vogel zeigen wenn ich sage das ihr noch an den Engine-Klassen rumbasteln müsst :|

Chewie 25. Aug 2006 20:33

Re: Parent herausfinden
 
Wieso kannst du das nicht alles kapseln? Ich versteh dein Problem nicht.

Neutral General 25. Aug 2006 20:38

Re: Parent herausfinden
 
Zitat:

Zitat von Chewie
Wieso kannst du das nicht alles kapseln? Ich versteh dein Problem nicht.

Kennst du die DelphiX Komponenten?

man braucht ein DXDraw eine DXImagelist und eine DXSpriteEngine wobei die letzten beiden durch Variablen mit dem DXDraw verbunden sind. Weißt du was ich machen muss wenn ich jetzt DXSpriteEngine.Engine (TSpriteEngine) verändere? Ich muss wie gesagt die DXSpriteEngine Kompo neu ableiten und ändern halt und dadurch auch DXDraw weil DXDraw ein TDXSpriteEngine will und keine TDXMeineSpriteEngine! :wall:

Chewie 25. Aug 2006 20:41

Re: Parent herausfinden
 
Ich kenn diese Komponenten nicht, nein.
Du hast also keine Möglichkeit zu bestimmen, welches TSpriteEngine-Object da drin ist? Nun, wenn das wirklich nicht geht würd ich versuchen, die Hierarchiebeziehung irgendwie seperat zu speichern.

Neutral General 25. Aug 2006 20:42

Re: Parent herausfinden
 
Und was ist mit diesem RTTI ?
Gibts da keine Möglichkeit?

Flocke 25. Aug 2006 21:12

Re: Parent herausfinden
 
Zitat:

Zitat von Neutral General
Ich muss wie gesagt die DXSpriteEngine Kompo neu ableiten und ändern halt und dadurch auch DXDraw weil DXDraw ein TDXSpriteEngine will und keine TDXMeineSpriteEngine! :wall:

Wenn du deine Komponente von TDXSpriteEngine ableitest, dann ist deine neue Komponente immer noch auch ein TDXSpriteEngine. Von TComponent abgeleitete Sachen (TControl, TWinControl, TEdit) sind auch alle immer noch TComponents und können überall da benutzt werden, wo ein TComponent benötigt wird.

Neutral General 26. Aug 2006 11:24

Re: Parent herausfinden
 
Also ich habs jetzt anders gemacht... Ob das jetzt so schön ist sei mal dahingestellt aber ich finds besser als direkt alles neuzuschreiben...

Delphi-Quellcode:
procedure TDXButton.SetModOptions;
var i,j: Integer;
begin
 for i:= 0 to Application.ComponentCount-1 do
 begin
  if Application.Components[i].ClassParent = TForm then
  begin
   for j:=0 to Application.Components[i].ComponentCount-1 do
   begin
    if Application.Components[i].Components[j].ClassType = TDXDraw then
    begin
     FDXDraw := TDXDraw(Application.Components[i].Components[j]);
     FForm := TForm(Application.Components[i]);
     if FForm.BorderStyle <> bsNone then
      FFormHasBorder := true;
     exit;
    end; // if    ClassType = TDXDraw
   end; //  for   j
  end; //   if    ClassParent = TForm
 end; //    for   i
end;
So hab ich mir jetzt die richtige Form und das DXDraw besorgt :mrgreen:

Gruß
Neutral General

Khabarakh 26. Aug 2006 11:28

Re: Parent herausfinden
 
Ääähm............ kreativ :mrgreen: .
Mal im Ernst, mit einer guten Klassenhierarchie sollte so etwas kein Problem sein.

Neutral General 26. Aug 2006 12:14

Re: Parent herausfinden
 
Zitat:

Zitat von Khabarakh
Ääähm............ kreativ :mrgreen: .
Mal im Ernst, mit einer guten Klassenhierarchie sollte so etwas kein Problem sein.

GRMMMPPFFF..Ich hab DelphiX nicht entwickelt :roll: :?


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