DELPHI - forms

Strona g│≤wna

 

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