[ komplikator @ 04.03.2011. 11:41 ] @
Radim neke svoje komponente koje su međuovisne. 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'; 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. |