![]() |
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 |
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. |
Re: Parent herausfinden
natürlich:
Bsp:
Delphi-Quellcode:
so Bla.ASubClass hat auch kein Parent aber das Parent von Bla.ASubClass ist Bla.
TBla = class
private public ASubClass: TSubClass; end; var Bla: TBla; Und ich will an Bla ran! :| Versteht ihr ? Gruß Neutral General |
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.
|
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 |
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. |
Re: Parent herausfinden
Was du meinst ist kein Parent, sondern eine Superklasse.
|
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? |
Re: Parent herausfinden
Zitat:
|
Re: Parent herausfinden
Zitat:
2. Code beispiel wäre nett :) Gruß Neutral General |
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? |
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 :? |
Re: Parent herausfinden
Hi!
Naja, du müsstest sie ja nur ableiten und die Parent-Eigenschaft hinzuzufügen.... Ciao, Frederic |
Re: Parent herausfinden
Ja aber schau mal
Delphi-Quellcode:
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 :|
TDXSpriteEngine = class(Wasweißichjetzt)
.. public Engine: TSpriteEngine; end; |
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.
|
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 :|
|
Re: Parent herausfinden
Wieso kannst du das nicht alles kapseln? Ich versteh dein Problem nicht.
|
Re: Parent herausfinden
Zitat:
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: |
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. |
Re: Parent herausfinden
Und was ist mit diesem RTTI ?
Gibts da keine Möglichkeit? |
Re: Parent herausfinden
Zitat:
|
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:
So hab ich mir jetzt die richtige Form und das DXDraw besorgt :mrgreen:
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; Gruß Neutral General |
Re: Parent herausfinden
Ääähm............ kreativ :mrgreen: .
Mal im Ernst, mit einer guten Klassenhierarchie sollte so etwas kein Problem sein. |
Re: Parent herausfinden
Zitat:
|
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