AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

FindComponent in initialization

Ein Thema von API · begonnen am 17. Jan 2009 · letzter Beitrag vom 18. Jan 2009
Antwort Antwort
API

Registriert seit: 18. Apr 2004
637 Beiträge
 
#1

FindComponent in initialization

  Alt 17. Jan 2009, 23:49
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;
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: FindComponent in initialization

  Alt 17. Jan 2009, 23:56
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.
  Mit Zitat antworten Zitat
API

Registriert seit: 18. Apr 2004
637 Beiträge
 
#3

Re: FindComponent in initialization

  Alt 18. Jan 2009, 09:52
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.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: FindComponent in initialization

  Alt 18. Jan 2009, 10:16
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
Heiko
  Mit Zitat antworten Zitat
API

Registriert seit: 18. Apr 2004
637 Beiträge
 
#5

Re: FindComponent in initialization

  Alt 18. Jan 2009, 10:22
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.
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: FindComponent in initialization

  Alt 18. Jan 2009, 14:46
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:34 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