![]() |
Komponentenerstellung: Prozedur wenn Programm gestartet wird
Hi,
hab mir eine Komponente abgeleitet und würde dort gerne Befehle ausführen, sobald das Programm compiliert wird. Wollte es erst so machen, dass ich im Constructor abfrage if not (csDesigning in ComponentState), aber anscheinend wird der Contructor nur zur Designzeit ausgeführt. Hat jemand eine Idee? :gruebel: |
Re: Komponentenerstellung: Prozedur wenn Programm gestartet
Wass willst du bei der Compilierung ausführen?
Zitat:
|
Re: Komponentenerstellung: Prozedur wenn Programm gestartet
Zitat:
Im Constructor lege ich doch verschiedene Properties fest (z.B. Caption := 'Test'). Wenn ich dann aber die Caption im OI (also zur Designzeit) ändere, so steht dann bei compilierten Programm (also zur Laufzeit) die geänderte Caption da. Also wird doch beim Compilieren die Caption nicht in 'Test' geändert, wie es im Constructor steht. Folglich wird beim Compilieren der Constructor nicht durchlaufen oder sehe ich da jetzt was komplett falsch ??? |
Re: Komponentenerstellung: Prozedur wenn Programm gestartet
Zitat:
Danach werden die Properties, die in der DFM-Datei gespeichert wurden den Komponenten zugewiesen. Danach wird die virtuelle Prozedur Loaded ausgeführt. Du kannst diese überladen, wenn du direkt nachdem die Komponente seine Properties erhalten hat noch etwas tun möchtest. |
Re: Komponentenerstellung: Prozedur wenn Programm gestartet
Zitat:
Tu doch mal ein ShowMessage in den Constructor, dann siehst dus auch :) |
Re: Komponentenerstellung: Prozedur wenn Programm gestartet
Danke :thumb: , jetzt hab ich das Prinzip verstanden!
Also erst Constructor durchlaufen, dann Properties aus dfm laden! Mein Problem liegt darin, dass ich im Constructor zunächst die Property auf den Default-Wert setze. Danach frage ich den Wert ab (auch noch im Constructor) und es kommt natürlich wieder de Default-Wert raus, obwhol er im OI geändert wurde. Wie kann ich dann diesen geänderten Wert (der ja in der dfm steht) beim Compilieren erhalten, das müsste dann also mit Loaded gehen? Wie und wo muss ich denn Loaded deklarieren? //Edit: Oder kann ich irgendwie anders, die Werte aus der dfm im Constructor erhalten - oder ist das überhaupt nicht möglich? |
Re: Komponentenerstellung: Prozedur wenn Programm gestartet
Zitat:
Delphi-Quellcode:
TMeineKompi = class(TComponent)
... protected procedure Loaded;overload; end; .... procedure TMeineKompi.Loaded; begin // wenn das Property verändert wurde, dann irgendwas nettes tun if Caption<>'default caption' then Caption := '***'+Caption+'***'; end; |
Re: Komponentenerstellung: Prozedur wenn Programm gestartet
Zitat:
Zitat:
|
Re: Komponentenerstellung: Prozedur wenn Programm gestartet
Delphi-Quellcode:
Da gehört eher ein override; hin :)
..;overload;...
|
Re: Komponentenerstellung: Prozedur wenn Programm gestartet
Danke!
Jetzt klappt's!!! :thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:52 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