Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Konstruktori kontrola

[es] :: Pascal / Delphi / Kylix :: Konstruktori kontrola

[ Pregleda: 1559 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

komplikator
Programer / sys. inženjering
CRO

Član broj: 29755
Poruke: 158
*.adsl.net.t-com.hr.

ICQ: 13387003


+8 Profil

icon Konstruktori kontrola04.03.2011. u 11:41 - pre 160 meseci
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.

God is real unless is declared as integer.
 
Odgovor na temu

komplikator
Programer / sys. inženjering
CRO

Član broj: 29755
Poruke: 158
*.adsl.net.t-com.hr.

ICQ: 13387003


+8 Profil

icon Re: Konstruktori kontrola04.03.2011. u 17:07 - pre 160 meseci
Moderator može zatvoriti i obrisati topic, riješio sam problem.
Malo predaha i promjena okoline pa naiđe koja pametna u glavu.
Tijekom konstruiranja još nisu učitana svojstva tj. propertiji i zato ništa ne štima. Tako da niti konstruktor niti metoda AfterCreate ne pomaže, no zato sve riješava metoda Loaded koja se aktivira nakon što se komponenta u potpunosti učita.

Sad još da riješim problem koji nam je stvorio naš dragi M$... Mudro su zaštitili registry ključeve koji su vezani uz event log pa se ne može kreirati nova aplikacija i grupa u NT event logu ako program ne pokrenete kao administrator. Srećom OpenKeyReadOnly spašava stvar da se key bar može provjeriti je li postoji, a stvoriti ga može jedino installer program pokrenut pod admin accountom.

Ima li netko priješenje za ovo? Sa restrikcijama nad registryjem?
God is real unless is declared as integer.
 
Odgovor na temu

((BugA))
Igor Djordjevic
Bor, Srbija

Član broj: 29241
Poruke: 196
*.dynamic.isp.telekom.rs.

ICQ: 66516695
Sajt: www.MalamutKlub.com


+17 Profil

icon Re: Konstruktori kontrola04.03.2011. u 18:55 - pre 159 meseci
Mislim da za registry nemas drugog resenja, i ja sa tim muku mucim za potrebe programa koji mora da menja parametre vec instalirane aplikacije unutar HKEY_LOCAL_MACHINE. Ili zahtevaj administratorske privilegije u okviru manifesta aplikacije (sto ce smarati korisnika svaki put kad pokrene aplikaciju, a nece raditi ukoliko korsnik nije administrator), ili napravi poseban modul koji ces pokretati iz svoje aplikacije samo kada je potrebno nesto upisati u registry (opet korisnik mora dozvoliti elevaciju, administratorska ovlascenja), ili pisi u delu registry baze gde imas pristup i kao obican korisnik (HKEY_CURRENT_USER, ovo je resenje koje MS forsira kao ispravno).

Pozdrav, BugA

p.s. Sad se setih, verujem da znas, ali ne skodi da te podsetim da obratis paznju na "Wow6432node" granu registry baze na 64-bitnim sistemima, tek da se ne desi da nesto trazis ili pises na pogresnom mestu.
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Konstruktori kontrola

[ Pregleda: 1559 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.