![]() |
eigene Kompo -> div. Probleme unter Delphi9
Ich habe eine Komponente von TCustomComboBox abgeleitet und habe nun plötzlich unter Delphi2005 (SP2) ein Problem... sobald ich die Komponente auf mein Form ziehe kommt die Meldung: Element '' hat kein übergeordnetes Fenster.
Codeauszug
Delphi-Quellcode:
Unter Delphi 5, 6 und 7 gibt es das Problem nicht :roll:
type
TFr_LocalMailComboBox = class(TCustomComboBox) private { Private-Deklarationen } ... protected { Protected-Deklarationen } ... public { Public-Deklarationen } constructor Create(AOwner: TComponent); override; destructor Destroy; override; published { Published-Deklarationen } ... end; procedure Register; implementation procedure Register; begin RegisterComponents('FriFra', [TFr_LocalMailComboBox]); end; constructor TFr_LocalMailComboBox.Create(AOwner: TComponent); begin inherited; LocalMail := TFr_LocalMail.Create(Self); { Testcode } Showmessage('jetzt'); //Diese Message kommt noch Items.Add('Test'); //hier geht dann etwas schief... :? Showmessage('ok'); //Di Message kommt wegen des Fehlers nicht SetDefaults; end; destructor TFr_LocalMailComboBox.Destroy; begin LocalMail.Free; inherited; end; ... |
Re: eigene Kompo -> Element '' hat kein übergeordnetes Fe
Kommt der gleiche Fehler auch, wenn du versuchst, den Items außerhalb des Konstruktors was hinzuzufügen?
|
Re: eigene Kompo -> Element '' hat kein übergeordnetes Fe
Ja. Das mit den Items innerhalb des Construktor habe ich nur mal als Test eingefügt...
Im übrigen sollte die Komponente an sich an dieser Stelle schon erzeugt sein, da "inherited" schon abgearbeitet ist. |
Re: eigene Kompo -> Element '' hat kein übergeordnetes Fe
Weise mal dem LocalMail-Objekt, das scheinbar ja eine Komponente ist, n Parent zu... oder is das keine Komponente? Dann weiß ich nämlich auch nicht weiter...
mfg Christian |
Re: eigene Kompo -> Element '' hat kein übergeordnetes Fe
hm, probiers doch mal so :
Delphi-Quellcode:
MfG
constructor TFr_LocalMailComboBox.Create(AOwner: TComponent);
begin inherited Create(AOwner); . . //LocalMail := TFr_LocalMail.Create(Self);.//hierrauf würde ich verzichten, was soll das denn hier? |
Re: eigene Kompo -> Element '' hat kein übergeordnetes Fe
Das tue ich doch:
Delphi-Quellcode:
@n0b0dy:
LocalMail := TFr_LocalMail.Create(Self);
Ich werds mal ändern und schaun was passiert ;) Auf das Erzeugen von "LocalMail"kann ich nicht verzichten, da ich diese Komponente während der gesamten Laufzeit meiner Komponente zwingend benötige. LocalMail ist quasi dei Kernkomponente, die ComboBox ist nur quasi ein Container um die Werte darzustellen ;) |
Re: eigene Kompo -> Element '' hat kein übergeordnetes Fe
versteh ich nicht. du kannst doch in jeder prcoedure über Self daraufzugreifen. Sind ja dann im Objekt deklariert....
|
Re: eigene Kompo -> Element '' hat kein übergeordnetes Fe
Zitat:
|
Re: eigene Kompo -> Element '' hat kein übergeordnetes Fe
Ganz offensichtlich wird bei Items.Add versucht das Fenster zu malen.
Das geht aber schief, da die Fenster noch gar nicht existieren. Insbesondere Parent ist noch nicht gesetzt und hat auch noch kein Fenster. Ueberschreibe Loaded oder AfterConstruction und mache es dort. |
Re: eigene Kompo -> Element '' hat kein übergeordnetes Fe
@FriFra :
so wie ich dich verstanden habe, willst du später über das LocalMail auf alles zugreifen. praktisch die Komponente an sich, oder!? wenn ja, kann man sich das sparen. denn in jeder Procedure würde "Self" genau das bewirken, was du vor hast.... oder was willst du damit bewirken? MfG |
Re: eigene Kompo -> Element '' hat kein übergeordnetes Fe
Nein, meine Komponente verwendet LocalMail ;)
|
Re: eigene Kompo -> Element '' hat kein übergeordnetes Fe
aaaaaaaaaaaaach. sry. hab mich ja auch volle kanne verlesen. da steht ja "TFr_LocalMail" anstatt "TFr_LocalMailComboBox"..
grml. jo ich nehme alles zurück. hab das überlesen, hab nämlcih nirgends ne deklaration davon gesehen. Naja. aber zum eigentlcihen Problem: Probiers mal so wie Robert, weil im OnCreate wirst du keine Items "zeichnen lassen" können, da die ComoBox noch nicht "richtig" existiert.. also erstmal ein Parent zuweisen:
Delphi-Quellcode:
(diesmal stimmt das mit dem Self *gg*)
Item.Parent := Self;
|
Re: eigene Kompo -> Element '' hat kein übergeordnetes Fe
Da bei einer ComboBox, wie bei allen Nachfolgern die Items von Windows verwaltet werden (wird in CreateParam angefordert), muss die ComboBox ein gültiges Windows-Handle besitzen, bevor sie Items akzeptiert.
Du Kannst Dir dahingehend behelfen, indem Du die Items Property überschreibst, und beim adden eines Items dir dieses erstmal woanders merkst, solange die Komponente noch kein handle hat. sobald sie eins kriegt kannst du dann die gemerkten Einträge in die richtige (geerbte) items liste eintragen. Oder Du weist erst dann items zu, wenn die ComboBox ein güliges Handle hat. (z.B.: im FormShow oder so). p.s.:Sieht komisch aus, ist aber so. |
Re: eigene Kompo -> Element '' hat kein übergeordnetes Fe
Der Fehler taucht aber doch auch auf, wenn's nicht im Konstruktor steht, also auch aus dem laufenden Programm heraus. Also muss es ja irgendwas anderes sein.
|
Re: eigene Kompo -> Element '' hat kein übergeordnetes Fe
Die Items sollten eigentlich funktionieren. Sie tun es ja auch wie angegeben bis Delphi 7.
Offensichtlich ist da ein Fehler in der Implementierung. Items ist ja erst mal eine private TStringList der Komponente. Die Elemente sollten dann erst bei Erstellung des Sklavenfensters (Windows ComboBox) dorthin ueberspielt werden. |
Re: eigene Kompo -> Element '' hat kein übergeordnetes Fe
Liste der Anhänge anzeigen (Anzahl: 1)
Also DER Fehler ist jetzt weg, allerdings "vegisst" die Komponente (TFr_LocalMailListView und TFr_LocalMailComboBoxEx) dauernd Ihre Properties und beim Programmstart gibts außerdem Schutzverletzungen (ungültige Zeigeroperation), wenn die Eigenschaft "KillDuplicates" aus True gesetzt ist (NUR beim Start, zur Laufzeit funzt das ganze) :x ... Bisher (D5-7, D2k5 ohne SP) lief alles :roll: ...
Ich wollte eigentlich nur die Fr_LocalMailComboBoxEx implementieren und nun läuft auch der ListView nicht mehr... ich glaub ich hab irgend etwas "zerbastelt" und ich bekomm nicht mehr hin :? :x :cry: ... Falls mal jemand drüber schaun will, ich hab das Package mal angehängt ;). Von der Basiskomponente ist jedoch nur die dcu dabei, das sollte aber reichen um den Fehler zu finden :wink: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:41 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