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

Dfm Creation Order ?!?!

[es] :: Pascal / Delphi / Kylix :: Dfm Creation Order ?!?!

[ Pregleda: 2306 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

_v!rus_
BGD

Član broj: 40451
Poruke: 313
*.dsl.siol.net.



+1 Profil

icon Dfm Creation Order ?!?!30.10.2006. u 20:29 - pre 211 meseci
Jel moze neko da mi kaze ZASTO se SVE visual komponente zapisuju u dfm forme (samim tim i kreiraju) PRE non-visual komponenti?!
U form designer-u se nalazi opcija [Creation order], ali je sa njom moguće izmeniti redosled kreiranja samo visual komponenti... Problem je u tome sto sam napravio svoje kontrole i kada ih vezem na neku non-visual komponentu (npr. TField ili TImageList), ta non-visual komponenta ce se kreirati POSLE moje kontrole. Kada se forma sa mojim kontrolama snimi i ponovo otvori svi property-i budu ok osim onih sto se vezuju na non-visual kontrole. Kada Delphi ucita DFM on pravilno kreira moje kontrole ali npr. property accesor-u SetField ce proslediti nil, jer taj prosledjeni TField se nalazi tek kasnije u DFM fajlu i bice kreiran tek POSLE kreiranja moje kontrole...

Zna li neko resenje za ovo?
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: Dfm Creation Order ?!?!30.10.2006. u 21:26 - pre 211 meseci
Ne znam sta bih ti rekao... koristim Delphi 7 i sve kontrole se u DFM fajlu nalaze u istom redu kao sto sam ih kreirao. Ako sam prvo stavio neku non-visual kontrolu (recimo neki dialog) pa zatim visual kontrolu (recimo dugme) u DFM fajlu je prvo definisan dialog pa tek onda dugme, a tim redom su i kreirani (ako overridujes standardne konstruktore, mozes to i da vidis).

Edit: evo... na formu sam prvo stavio dialog i zatim dugme... dfm fajl izgleda ovako:
Code:
object Form1: TForm1
  Left = 192
  Top = 114
  Width = 783
  Height = 540
  Caption = 'Form1'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object OpenDialog1: TOpenDialog
    DefaultExt = 'dll'
    Filter = 'Dll|*.dll'
    Left = 152
    Top = 8
  end
  object Button1: TButton
    Left = 8
    Top = 8
    Width = 75
    Height = 25
    Caption = 'Load'
    TabOrder = 0
    OnClick = Button1Click
  end
end

 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Dfm Creation Order ?!?!31.10.2006. u 09:05 - pre 211 meseci
> Jel moze neko da mi kaze ZASTO se SVE visual komponente zapisuju u dfm
> forme (samim tim i kreiraju) PRE non-visual komponenti?!

TComponent ima metodu (ne secam se tacnog naziva) koja ide redom kroz sve child komponente (Components lista) koje poseduje i redom ih streamuje, TWinControl (TControl) overrajduje tu metodu i prolazi kroz sve vizuelne kontrole (Controls lista).

> kreiranja samo visual komponenti... Problem je u tome sto sam napravio
> svoje kontrole i kada ih vezem na neku non-visual komponentu (npr. TField ili TImageList),
> ta non-visual komponenta ce se kreirati POSLE moje kontrole. Kada se forma
> sa mojim kontrolama snimi i ponovo otvori svi property-i budu ok osim onih
> sto se vezuju na non-visual kontrole. Kada Delphi ucita DFM on pravilno
> kreira moje kontrole ali npr. property accesor-u SetField ce proslediti nil, jer
> taj prosledjeni TField se nalazi tek kasnije u DFM fajlu i bice kreiran
> tek POSLE kreiranja moje kontrole...

Delphi streaming sistem kod učitavanja pravi fixup listu referenci na metode i druge klase, tek kada se završi kompletno kreiranje svih komponenti, prelazi se na fixup listu i onda se radi resolving referenci. Dakle, u tom trenutku sve komponente postoje, klasičan primer su reference na TDataSet ili TDataSource u data aware komponentama. Ako vidiš rugačije ponašanje, znači da si negde napravio grešku. Proveri kod i pogledaj kako su urađene druge nevizuelne komponente.
 
Odgovor na temu

Milos D
Beograd

Član broj: 5621
Poruke: 280
*.adsl.sezampro.yu.



+1 Profil

icon Re: Dfm Creation Order ?!?!31.10.2006. u 09:21 - pre 211 meseci
Preklopi Loaded metodu - u trenutku poziva te metode trebalo bi da sve property vrednosti budu podesene? Ili daj kod da vidimo...
 
Odgovor na temu

_v!rus_
BGD

Član broj: 40451
Poruke: 313
*.dsl.siol.net.



+1 Profil

icon Re: Dfm Creation Order ?!?!31.10.2006. u 12:41 - pre 211 meseci
Citat:
Delphi streaming sistem kod učitavanja pravi fixup listu referenci na metode i druge klase, tek kada se završi kompletno kreiranje svih komponenti, prelazi se na fixup listu i onda se radi resolving referenci

Posle malo(vise) igranja dosao sam do istog zakljucka, da radi u dva prolaza... U svakom slucaju delimicno sam resio problem. Stvar je bila u tome da sam hteo da napravim da SetImages i SetImageIndex moje kontrole oboje pozivaju UpdateImage proceduru koja dodeljuje image kombinacijom ta dva polja, greska je bila u tome da je taj UpdateImage modifikovao FImageIndex tj. stavljao ga na -1 ako je ImageIndex=nil, i obratno.

Nego kada ste vec raspolozeni za odgovaranje, jos par pitanja u vezi streaminga komponenti...
1. What's the deal sa TBitmap objektima u DFM-u? Kada napravim TBitmap property u svojoj kontroli, SetBitmap u FormDesigneru lepo odradi posao i dodeli TBitmap objekat mom property-u (SetBitmap(Val: TBitmap) if not nil then FBitmap.Assign(Val)...), ali se prilikom startovanja aplikacije SetBitmap uopste ne opali iako se slika uredno nadje u FBitmap polju. U DFM-u se slika nalazi u Data=... sekciji ali nemam SetBitmap da bih nesto jos uradio sa tom slikom kakda se dodeli... Onda moram neke budzeve tipa UpdateComponents na pocetku aplikacije (uzas...) Znam da TBimap je TPersistent, nije valjda da component streamer puni TPersistent direktno, preko pointera?!

(EDIT: Nisam video Milosev post za Loaded metod. Hvala Milose, ako to radi onda je to resenje i za ovaj i za prvobitni problem)

2. Kako da nateram FormDesigner da snima property-e podkontrola moje kontrole. Naime, imam svoj TPanel descendant koji izmadju ostalog ima i jedan TButton sa uredno postavljenim published Button: TButton read FButton; E sada, u FormDesigner-u mogu da menjam taj Button, ali se nijedna promena ne snima. Owner za TButton je moja kontrola... kapiram da property-je strimuje owner komponenta, i kada promenim ownera buttona na TMojaKontrola.Owner, onda se promene snimaju, ali se cudne stvari desavaju (sto je savrseno normalno, u tom slucaju TForm kreira moju kontrolu koja "vestacki" ubacuje jos jedan Button u TForm, onda posle svakog ucitavanja forme broj Button kontrola se udvostrucuje jer ih kreira i TForm i moja kontrola...). Ima li neki sistem da nateram svoju kontrolu da strimuje i svoje podkontrole kada njen owner hoce da je snimi u DFM?

 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Dfm Creation Order ?!?!

[ Pregleda: 2306 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

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