Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 4 odgovora
  • 3.118 pregleda

Najnovija ↓

Dfm Creation Order ?!?! 30.10.2006. u 21:29 · pre 243 meseca #1
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?
Re: Dfm Creation Order ?!?! 30.10.2006. u 22:26 · pre 243 meseca #2
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
Potpis
Play Store
Re: Dfm Creation Order ?!?! 31.10.2006. u 10:05 · pre 243 meseca #3
> 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.
Potpis
Do not be a help vampire (http://slash7.com/pages/vampires), use the google.

How to ask questions the smart way:
http://www.catb.org/~esr/faqs/smart-questions.html
http://solair.eunet.rs/~fangor...stions/smart-questions.sr.html
Re: Dfm Creation Order ?!?! 31.10.2006. u 10:21 · pre 243 meseca #4
Preklopi Loaded metodu - u trenutku poziva te metode trebalo bi da sve property vrednosti budu podesene? Ili daj kod da vidimo...
Re: Dfm Creation Order ?!?! 31.10.2006. u 13:41 · pre 243 meseca #5
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?

Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme