Pokusaj u virtuelnoj metodi Loaded. Nesto ovako:
Code:
procedure TMyClassA.Loaded; override;
var
i: integer;
begin
inherited;
for i := 0 to fInstanceBNumber - 1 do
// ovde kreiramo instance klase B
end;
Jedna vazna napomena u vezi procedure Loaded. Kada se ona izvrsava TACNO? Evo mali primer da pojasnim:
Code:
constructor TMyClassA.Create(aOwner: TComponent; InstanceBNumber: integer); // menjamo malo konstruktor, primera radi
begin
fInstanceBNumber := InstanceNumber;
inherited Create(aOwner); // OVDE se izvrsava Loaded
end;
Obrati paznju na redosled u konstruktoru. Ako prvo pozovemo inherited konstruktor, pa naknadno dodelimo broj instanci fInstanceBNumber, Loaded nece raditi (kreirace se nula instanci).
Takodje, ako zelis da radvojis kod (logicki) koji treba da se izvrsava u nekom trenutku/stanju komponenta, koristi property ComponentState instance A. Recimo, dok se izvrsavaju Loaded metode tvoje aplikacije (svi komponenti imaju Loaded) vazi takodje za sve komponente
Code:
(csLoading in ComponentState) = true;
Ima tu jos dosta caka sa ComponentState, recimo postoji i csDesigning, za indikaciju da si komponent upravo drop-ovao sa palete na formu, to jest da nisi u runtime-u.
Probaj, mislim da bi ovo gore trebalo da radi.
Rajko