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 Element '' hat kein übergeordnetes Fenster (https://www.delphipraxis.net/54171-element-hat-kein-uebergeordnetes-fenster.html)

Baeuerle 29. Sep 2005 07:03


Element '' hat kein übergeordnetes Fenster
 
Hallo,
bitte seht euch mal folgendes an und sagt mir bitte warum es in der Zeile Items.Add() knallt wenn ich die Kompo auf das Formular setze.

Delphi-Quellcode:
type
  TTimeZoneBox = class(TComboBox)
  private
    { Private-Deklarationen }
  protected
    { Protected-Deklarationen }
  public
    { Public-Deklarationen }
    constructor Create(AOwner: TComponent); override;
  published
    { Published-Deklarationen }
  end;

constructor TTimeZoneBox.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
// Hier knallts !!!!!
items.add('Irgendwas');
end;
Danke Bauerle

teebee 29. Sep 2005 07:19

Re: Element '' hat kein übergeordnetes Fenster
 
Setze den Code-Teil, der die Items vorbelegt, in eine überschriebene CreateWnd Methode. Dort hast Du auf jeden Fall ein gültiges Handle mit Parent.
Achtung: CreateWnd kann theoretisch mehrmals im Laufe des Programms aufgerufen werden, evtl. musst Du ein Flag mit einbauen, das dafür sorgt, dass der Initialisierungs-Code nur ein einziges Mal ausgeführt wird.

Gruß, teebee

MrSpock 29. Sep 2005 07:26

Re: Element '' hat kein übergeordnetes Fenster
 
Hallo Baeuerle,

wie die Fehlermeldung ja bereits sagt, fehlt ein Elternteil :mrgreen: .

Versuchs mal so:

Delphi-Quellcode:
constructor TTimeZoneBox.Create(AOwner: TComponent);
begin
   inherited Create(AOwner);
   Parent := AOwner as TWinControl;
   // Hier knallts jetzt nicht mehr!!!!!
   self.items.add('Irgendwas');
end;

Baeuerle 29. Sep 2005 07:27

Re: Element '' hat kein übergeordnetes Fenster
 
Kann ich das mit

Delphi-Quellcode:
 csloading in componentstate
abfangen?

MrSpock 29. Sep 2005 07:31

Re: Element '' hat kein übergeordnetes Fenster
 
Hallo Baeuerle,

nein. Komponenten brauchen immer ein Parent, in dem sie dargestellt werden.

Flocke 29. Sep 2005 07:37

Re: Element '' hat kein übergeordnetes Fenster
 
Zitat:

Zitat von Baeuerle
Kann ich das mit

Delphi-Quellcode:
 csloading in componentstate
abfangen?

Du solltest besser die Methode Loaded überschreiben und in dieser die ComboBox füllen. Alternativ geht natürlich auch das Überschreiben von CreateWnd.

Zitat:

Zitat von MrSpock
Hallo Baeuerle,

nein. Komponenten brauchen immer ein Parent, in dem sie dargestellt werden.

Schon - aber eigentlich muss die Komponente sich den Parent nicht selbst zuweisen.

[Nachtrag]

Der Fehler tritt auf, weil ein Control normalerweise so erzeugt wird:
Delphi-Quellcode:
Variable := TControl.Create(Owner);
Variable.Parent := IrgendEinControl;
... du kannst also in der Methode .Create noch keinen Parent haben!

teebee 29. Sep 2005 07:53

Re: Element '' hat kein übergeordnetes Fenster
 
Zitat:

Zitat von Flocke
Du solltest besser die Methode Loaded überschreiben und in dieser die ComboBox füllen. Alternativ geht natürlich auch das Überschreiben von CreateWnd.

Wenn man Loaded überschreibt, kann man die Komponente später nicht mehr dynamisch erstellen. Dabei wird Loaded nämlich nicht aufgerufen. Es bleibt also nur CreateWnd als Option.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:15 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz