Wann werden die Properties einer neuen Kompo gesetzt?

Rund um die LCL und andere Komponenten

Wann werden die Properties einer neuen Kompo gesetzt?

Beitragvon braunbär » 9. Okt 2018, 13:15 Wann werden die Properties einer neuen Kompo gesetzt?

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?
braunbär
 
Beiträge: 253
Registriert: 8. Jun 2017, 17:21

Beitragvon wp_xyz » 9. Okt 2018, 13:44 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.
wp_xyz
 
Beiträge: 2695
Registriert: 8. Apr 2011, 08:01

Beitragvon mse » 9. Okt 2018, 13:52 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.
mse
 
Beiträge: 2013
Registriert: 16. Okt 2008, 09: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
Nach oben

Beitragvon braunbär » 10. Okt 2018, 22:45 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.
braunbär
 
Beiträge: 253
Registriert: 8. Jun 2017, 17:21

Beitragvon mse » 11. Okt 2018, 06:30 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.
mse
 
Beiträge: 2013
Registriert: 16. Okt 2008, 09: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
Nach oben

• Themenende •

Zurück zu Komponenten und Packages



Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 1 Gast

porpoises-institution
accuracy-worried