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 FindComponent in initialization (https://www.delphipraxis.net/127718-findcomponent-initialization.html)

API 17. Jan 2009 22:49


FindComponent in initialization
 
Hi

Im initialization Teil einer Unit soll festgestellt werden können, ob auf der Form eine bestimmte
Komponente vorhanden ist (resp sein wird)

Natürlich funktioniert FindComponent() nicht, da die Komponente noch nicht erzeugt wurde.

Wie kann ich also überprüfen, ob die Komponente TMyControl auf dem Form erstellt wird?
Muss man da auf die dfm Ressource zugreifen oder geht das auch anders?

Delphi-Quellcode:
initialization

 if Screen.FindComponent('TMyControl') = nil then
  begin
    ShowMessage('TMyControl');
  end;

omata 17. Jan 2009 22:56

Re: FindComponent in initialization
 
Das macht irgendwie gar keinen Sinn.

Lass dir doch im TMyControl-Konstruktur den Owner übergeben und mache diesen Test dann im Konstruktur. Der Initialization-Teil ist für andere Dinge gedacht.

API 18. Jan 2009 08:52

Re: FindComponent in initialization
 
Zitat:

Zitat von omata
Das macht irgendwie gar keinen Sinn.

Lass dir doch im TMyControl-Konstruktur den Owner übergeben und mache diesen Test dann im Konstruktur. Der Initialization-Teil ist für andere Dinge gedacht.

Nun es ist in meinem Fall nicht so einfach. Ich hole es mehr aus:

Eine Komponente1 soll eine andere Komponente2 erzeugen, falls sich diese nicht auf dem Formular befindet.
Wenn also Komponente2 schon auf dem Formular ist, erzeugt Komponente1 die Komponente2 nicht.
Die Problematik ist, dass Komponente1 je nach dem vor Komponente2 erzeugt wird.
So weiß Komponente1 nichts von einer möglichen Existenz von Komponente2, da diese erst später erzeugt wird.

hoika 18. Jan 2009 09:16

Re: FindComponent in initialization
 
Hallo,

entweder du änderst die Erzeugungs-Reihenfolge,
oder du rufst im FormActivate eine Methode auf, die den Test macht.

Ob folgende Methode klappt, musst du mal testen.
Jedes Control hat eine virtuelle Loaded-Methode.
die wird aufgerufen, nachdem das Control erstellt wurde.
Vielleicht hat ja auch das TForm sowas ?


Heiko

API 18. Jan 2009 09:22

Re: FindComponent in initialization
 
Zitat:

Zitat von hoika
entweder du änderst die Erzeugungs-Reihenfolge,
oder du rufst im FormActivate eine Methode auf, die den Test macht.

Ob folgende Methode klappt, musst du mal testen.
Jedes Control hat eine virtuelle Loaded-Methode.
die wird aufgerufen, nachdem das Control erstellt wurde.
Vielleicht hat ja auch das TForm sowas ?
Heiko

Hallo Heiko, der Check soll eben von Komponente1 aus gemacht werden, ob Komponente2 erstellt wird oder nicht.

omata 18. Jan 2009 13:46

Re: FindComponent in initialization
 
Zitat:

Zitat von API
Eine Komponente1 soll eine andere Komponente2 erzeugen, falls sich diese nicht auf dem Formular befindet.
Wenn also Komponente2 schon auf dem Formular ist, erzeugt Komponente1 die Komponente2 nicht.
Die Problematik ist, dass Komponente1 je nach dem vor Komponente2 erzeugt wird.
So weiß Komponente1 nichts von einer möglichen Existenz von Komponente2, da diese erst später erzeugt wird.

Soll dieser Test eigentlich zur Laufzeit oder zur Designzeit oder in beiden Zuständen gemacht werden?

Und ich glaube du machst es dir zu einfach. Stell dir mal vor, ich erzeuge Komponente1 zweimal. Was machst du dann?
Also du must noch mehr Helligkeit in diese Dunkelheit bringen, sonst kann man dir wirklich nicht helfen.


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