ich habe eine Komponente TfdEdit von TEdit abgeleitet.
Im Konstruktor Create von TfdEdit rufe ich als erstes "inherited" auf. Leider sind nach der Rückkehr vom "Inherited Create" die Properties, die im OI gesetzt worden sind, immer noch leer.
Wann werden die initialisiert, bzw. wann ist der frühest mögliche Zeitpunkt, zu dem man auf diese Properties zuzugreifen kann?
Wann werden die Properties einer neuen Kompo gesetzt?
Re: Wann werden die Properties einer neuen Kompo gesetzt?
Properties, die im Object Inspector erscheinen sollen, müssen als "published" deklariert werden. Machst du das so? Daneben ist es noch wichtig, ihre Default-Werte im Create-Constructor festzulegen. Oft möchte man aus Kompatibilitätsgründen Properties nur dann in der lfm-Datei, wenn sein Wert nicht dem Default-Wert entspricht; dazu muss man die Direktive "default" verwenden, bzw. es muss eine funktion a la "IsStoredXXXX()" vorhanden sein, die true zurückgeben muss, wenn das Property in die lfm-Datei geschrieben werden soll.
Schau dir den LCL-Quellcode an - da findest du Unmengen von Beispielen.
Schau dir den LCL-Quellcode an - da findest du Unmengen von Beispielen.
-
- Beiträge: 2013
- Registriert: Do 16. Okt 2008, 10:22
- OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
- CPU-Target: x86,x64,ARM
Re: Wann werden die Properties einer neuen Kompo gesetzt?
braunbär hat geschrieben:Wann werden die initialisiert,
In "TComponent.ReadState()" aufgerufen vom Streaming Mechanismus des Formulars.
bzw. wann ist der frühest mögliche Zeitpunkt, zu dem man auf diese Properties zuzugreifen kann?
In TComponent.Loaded() oder ReadState() nach Aufruf von inherited. Nach ReadState() sind Eigenschaften vom Typ TComponent in der Regel noch nicht gelinkt.
-
- Beiträge: 369
- Registriert: Do 8. Jun 2017, 18:21
- OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10, FPC 3.2.0
- CPU-Target: 64Bit
- Wohnort: Wien
Re: Wann werden die Properties einer neuen Kompo gesetzt?
mse hat geschrieben:In TComponent.Loaded()
D.h. in der Form gibt es keine Methode, die aufgerufen wird, wenn alle Komponenten fertig sind.
OK. ist auch nicht wirklich schlimm. Ich wollte im OnCreate ein paar Testausgaben in eine Debug-Datei schreiben, weil irgendwas nicht so läuft, wie ich es mir vorgestellt habe (und leider gefühlsmässig der GDB ziemlich unbrauchbar ist) - dann muss ich das eben statt dessen im Loaded der Komponenten machen.
-
- Beiträge: 2013
- Registriert: Do 16. Okt 2008, 10:22
- OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
- CPU-Target: x86,x64,ARM
Re: Wann werden die Properties einer neuen Kompo gesetzt?
Doch, Loaded(). OnCreate wird vermutlich auch aufgerufen, nachdem die Komponenten geladen wurden, auf jeden Fall ist das in MSEgui so. Dann gibt es noch OnLoaded.
gdb kombiniert mit einer IDE ist ist gut zu arbeiten, wenn man auf die Eigenarten des Verbunds Free Pascal - gdb Rücksicht nimmt.
gdb kombiniert mit einer IDE ist ist gut zu arbeiten, wenn man auf die Eigenarten des Verbunds Free Pascal - gdb Rücksicht nimmt.