Delphi-PRAXiS
Seite 2 von 2     12   

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 Feststellen ob Komponente zur Laufzeit erstellt wurde (https://www.delphipraxis.net/3290-feststellen-ob-komponente-zur-laufzeit-erstellt-wurde.html)

janjan 5. Mär 2003 21:20

Dann kannst du mit ComponentState nicht viel anfangen, da dir das nur den aktuellen Zustand anzeigt. Wenn da ein csDesigning drin ist, dann heißt das, das grade in diesem Moment die Komponente im Designmodus läuft. Während der normalen LaufZeit wird es nie ein csDesign geben.

Touchdown 5. Mär 2003 21:20

Es überhaupt keinen Sinn wissen zu wollen ob ein Objekt während der Laufzeit erzeugt wurde oder nicht!

Ich würde mal nach anderen Lösungsmöglichkeiten suchen!

sakura 5. Mär 2003 22:45

Jetzt ist klar was Du willst. Die Antwort ist: geht nicht :( Füge einfach ein Prozedur ein, welche Du im Code aufrufst, wenn Du die Komponente zur Laufzeit aufrufst, z.B.
Delphi-Quellcode:
APPKompo := TAPPKompo.Create(Self);
APPKompo.InitRunTimeSettings;
...:cat:...

APP 6. Mär 2003 00:27

@Sakura
Du wirst lachen, das habe ich bis jetzt so gemacht, allerdings dachte ich, das diese Lösung nicht sehr elegant ist. :mrgreen:

@Touchdown
Nun ja, ich denke aus der Sicht eines Komponenten-Users ist es schon sinnvoll zu wissen "ob ein Objekt während der Laufzeit erzeugt wurde oder nicht", da ich versuchen möchte, es dem User so einfach wie möglich zu machen, dadurch kann er auch nichts vergessen.


Einen "zarten" Versuch möchte ich noch machen, bitte schaut Euch das mal an:
Delphi-Quellcode:
   IF (Self.GetOwner.ClassName = 'TApplication') THEN // Komponente ist zur Runtime erstellt worden
      BEGIN
         Application.OnException := onFlappException;
         IF FIniFileName = '' THEN FIniFileName := ChangeFileExt(Application.ExeName, '.INI');
         SetFlappErrorProp(Self);                   // Ini Lesen
      END
   ELSE                                          // Komponente ist zur Designtime erstellt worden
      BEGIN
         IF FIniFileName <> '' THEN SetFlappErrorProp(Self); // Wenn Inidatei vorhanden ist, dann lesen
         ...    
   END;
Ich dachte mir, wenn die Kompo während der Laufzeit erstellt wurde ist der Klassenname "TApplication" und dieser kann wohl nicht verändert werden (oder?!).
Delphi-Quellcode:
FError := TFlappError.Create(Application);
Wenn ich umgekehrt frage, ob der Klassenname eine Form ist (=Erstellung schon zur DesignTime) scheint mir das zu unsicher, da der User/Programmierer den Namen der Form ändern darf.


Was meint Ihr zu meiner Lösung?

:cat: Armin

jbg 6. Mär 2003 07:10

Zitat:

Delphi-Quellcode:
IF (Self.GetOwner.ClassName = 'TApplication') THEN // Komponente ist zur Runtime erstellt worden

Und was ist, wenn ich folgendes mache:
Delphi-Quellcode:
MyComp := TMyComp.Create(Form1);

APP 6. Mär 2003 11:43

Tja, grundsätzlich hast Du recht, aber meine Kompo soll ein globaler Exception Handler werden. In diesem Fall gibt es (für mich) nur einen Grund, die Komponente dynamisch zu erzeugen, nämlich wenn man auch Ereignisse vor FormMain.Create erfassen möchte, daher ist der Aufruf im Projektquelltext sinvoll.

Man könnte natürlich die Kompo trotzdem im Hauptformular erzeugen, anstatt im Projektquelltext (wie mir Christian unter Komponente vor der Erzeugung der 1. Form aktivieren? zeigte), aber mir scheint es im Projektquelltext sinvoller zu sein.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:15 Uhr.
Seite 2 von 2     12   

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 by Thomas Breitkreuz