Tworzenie okien (form) podczas dzia│ania
programu
Je┐eli napisa│e╢ du┐▒ aplikacjΩ,
zawieraj▒c▒ wiele okien m≤wisz sam do siebie: "Moja
aplikacja strasznie d│ugo siΩ uruchamia". Czym to jest
spowodowane? Spowodowane jest to tworzeniem wszystkich okien na
samym pocz▒tku aplikacji (zobacz View -> Project Source),
kt≤re mog▒ byµ w og≤le nie uruchamiane przez u┐ytkownika.
Jak temu zapobiec/ Ju┐ m≤wiΩ (ekhm... piszΩ ;) ) wy╢wietl, z
menu Project -> Options... , zak│adkΩ Forms. Kliknij na
kt≤re╢ z okien (jego nazwΩ) i naci╢nij na ">".
Jak widzisz okno zostanie przeniesione do Available forms. W ten
spos≤b okno nie zostanie utworzone na pocz▒tku aplikacji
(zobacz: View -> Project Source).
UWAGA: jak przeniesiesz wszystkie okna to aplikcaja uruchomi siΩ
i od razu wy│▒czy.
»eby siΩ upewniµ, ┐e wszystko dzia│a stw≤rz w g│≤wnym
oknie (czyli w tym, kt≤rego nie da│e╢ do Available Forms i w
tym, kt≤re jest w Main Form) przycisk (button) i wpisz w
zdarzeniu (zderzeniu ? ;)) nastΩpuj▒cy kod:
Form2.Visible
:= True;
Uruchom aplikacjΩ. Na razie wszystko gra (a
po╝niej? SformatujΩ Ci kompa :)), ale gdy naci╢niesz przycisk
wyskoczy Ci komunikat:
Project Project1.exe raised exception class EAccess Violation
with message 'Access violation at address 00429C6B in module
'PROJECT.EXE'. Read of address FFFFFFFF'. Process stopped. Use
Step or Run to continue.
a aplikcaja zostanie przerwana. Czemu? Bo nie stworzyli╢my
naszego "zabitego" okna (Form2). »eby wszystko
dzia│a│o musimy w zdarzeniu OnClick (button) daµ najpierw
(przed From2.Visible := True;):
Application.CreateForm(TForm2,Form2);
W ten spos≤b nasze "zabite" okno
zostanie co dopiero utworzone po naci╢niΩciu przycisku.
Oczywi╢cie mo┐na daµ wiΩcej "zabitych" okien, ale
musisz pamiΩtaµ ┐eby je utworzyc przed pr≤b▒ pojawienia go!
Mo┐esz jeszcze daµ do naszego "zabitego" okna
nastΩpuj▒cy, w zdarzeniu OnClose, kod:
Action :=
caFree;
A w zdarzeniu OnDestroy:
Form2:=nil;
DziΩki temu nasze "zabite" okno zostanie po
zamkniΩciu zniszczone (lepiej jednak tego nie u┐ywaµ).
PC