Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi eigene Kompo -> div. Probleme unter Delphi9 (https://www.delphipraxis.net/53321-eigene-kompo-div-probleme-unter-delphi9.html)

FriFra 14. Sep 2005 08:17


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:
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;

...
Unter Delphi 5, 6 und 7 gibt es das Problem nicht :roll:

tigerman33 14. Sep 2005 08:32

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?

FriFra 14. Sep 2005 08:39

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.

r2c2 14. Sep 2005 09:14

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

n0b0dy 14. Sep 2005 09:26

Re: eigene Kompo -> Element '' hat kein übergeordnetes Fe
 
hm, probiers doch mal so :

Delphi-Quellcode:
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?
MfG

FriFra 14. Sep 2005 09:29

Re: eigene Kompo -> Element '' hat kein übergeordnetes Fe
 
Das tue ich doch:
Delphi-Quellcode:
LocalMail := TFr_LocalMail.Create(Self);
@n0b0dy:
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 ;)

n0b0dy 14. Sep 2005 09:31

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....

FriFra 14. Sep 2005 09:36

Re: eigene Kompo -> Element '' hat kein übergeordnetes Fe
 
Zitat:

Zitat von n0b0dy
versteh ich nicht. du kannst doch in jeder prcoedure über Self daraufzugreifen. Sind ja dann im Objekt deklariert....

Da versteh ich jetzt nicht was Du meinst :roll: :gruebel: ...

Robert Marquardt 14. Sep 2005 09:42

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.

n0b0dy 14. Sep 2005 09:48

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

FriFra 14. Sep 2005 09:49

Re: eigene Kompo -> Element '' hat kein übergeordnetes Fe
 
Nein, meine Komponente verwendet LocalMail ;)

n0b0dy 14. Sep 2005 09:51

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:
Item.Parent := Self;
(diesmal stimmt das mit dem Self *gg*)

Sidorion 14. Sep 2005 09:55

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.

tigerman33 14. Sep 2005 10:30

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.

Robert Marquardt 14. Sep 2005 10:33

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.

FriFra 14. Sep 2005 10:48

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