Primjerice, imam jednu komponentu za setiranje programa i drugu koja je log grešaka u NT err log.
Prva komponenta (za setiranje) referencira na ovu drugu tako da ova za obradu grešaka zna neke podatke o programu, a ova za setiranje pak ima kamo već u startu uputiti grešku.
Obje komponente dodam na formu i one si odmah postave neke default vrijednosti. Nadgledam im i Notification pa se same poslože kod dodavanja ili uklanjanja sa forme.
Problem je u konstruktorima. Konstruktor prve kontrole u trenutku svojeg pozivanja još ne vidi log kontrolu i kreira je pozivanjem njenog konstruktora sa svojim ownerom. Potom ovoj drugoj napuni neke vrijednosti propertyja i sve skupa radi. I radi sve dok se ne konstruira posljednja kontrola na formi, a nakon što aplikacija pređe u rad (application.run) forma sama rekreira ovu drugu kontrolu (log) i prepiše mi propertyje sa defaultnima iz dfm-a.
Zašto mi se ponovno konstruira kontrola ako je već jednom konstruirana (doduše prije nego ju je konstruirala forma)?
Malo sam zbrćkano objasnio...
skraćeno je otprilike ovako:
Code:
fErrLog: TB8Log;
...
property B8Log: TB8Log read fErrLog write fErrLog;
...
TB8Config.Create( AOwner: TComponent );
inherited;
...
if ( not Assigned( fErrLog ) and not( csDesigning in ComponentState ) ) then
fErrLog := TB8Log.Create( Self.Owner as TForm );
if Assigned( fErrLog ) then
with fErrLog do
begin
AppName := fAplName;
AppGroup := '8Bita';
CreateRegEntry;
InitLogging;
end;
I druga komponenta:
property AppName: string read FAppName write SetAppName;
property AppGroup: string read FAppGroup write SetAppGroup;
constructor TB8Log.Create( aOwner: TComponent );
inherited Create( aOwner );
FEnabled := false;
evtHandle := 0;
FAppName := 'DefApp';
FAppGroup := '8Bita';
fErrLog: TB8Log;
...
property B8Log: TB8Log read fErrLog write fErrLog;
...
TB8Config.Create( AOwner: TComponent );
inherited;
...
if ( not Assigned( fErrLog ) and not( csDesigning in ComponentState ) ) then
fErrLog := TB8Log.Create( Self.Owner as TForm );
if Assigned( fErrLog ) then
with fErrLog do
begin
AppName := fAplName;
AppGroup := '8Bita';
CreateRegEntry;
InitLogging;
end;
I druga komponenta:
property AppName: string read FAppName write SetAppName;
property AppGroup: string read FAppGroup write SetAppGroup;
constructor TB8Log.Create( aOwner: TComponent );
inherited Create( aOwner );
FEnabled := false;
evtHandle := 0;
FAppName := 'DefApp';
FAppGroup := '8Bita';
Problem je što druga komponenta prvo ima propertije iz konstruktora. Potom konstruktor prve komponente setira propertije kako i treba, no nakon konstruiranja svih komponenti i kontrola sa forme (vjerojatno iz .DFM-a.) učita ove vrijednosti.
God is real unless is declared as integer.