To co podałeś zwykle istnieje w głównym pliku projektu, czyli w pliku .dpr (lub .lpr pod Lazarusem); Oczywiście nie jest powiedziane, że tego nie można przenieść do innego modułu - ważne, żeby w tym module był w liście Uses moduł Forms, bo w nim znajduje się obiekt Application; Ale to mniej ważne;
Wracając do problemu - tak, wszystkie formularze są w tym momencie tworzone i ładowane do pamięci; Tych okien nie widać, są ukryte, jednak zabierają czas procesora przy rozruchu i zapychają pamięć; Im więcej formularzy tworzonych na starcie, tym dłużej trwa rozruch - to raczej normalne; Natomiast im więcej danych same formularze trzymają, tym bardziej zapychają pamięć - to też oczywiste;
Statycznie tworzone okna są dobre dla świeżaków, dopiero zaczynających przygodę z programowaniem aplikacji okienkowych; Najlepszym co można zrobić to tworzyć formularze dynamicznie - tylko wtedy, gdy są faktycznie potrzebne; Oczywiście wszystko zależy od przypadku, jednak należy przyjąć zasadę, że nie zajmujemy pamięci, jeśli nie jest to nam potrzebne w danej chwili; Tym bardziej, jeśli aplikacja posiada dziesiątki lub setki okien - tworzenie ich wszystkich przy rozruchu to samobójstwo;
Dynamiczne tworzenie okien jest bardzo proste, przykład:
SubForm := TSubForm.Create(Self); // bieżący formularz jako właściciel
try
{ operacje inicjujące - tu lub w konstruktorze klasy TSubForm }
SubForm.ShowModal();
{ operacje finalizujące - tu lub w destruktorze klasy TSubForm }
finally
SubForm.Free();
end;
To taki prosty schemat, dzięki któremu okienko tworzone jest na żądanie, wyświetlone modalnie (jako okno dialogowe), a po zamknięciu zwalniane z pamięci; Dzięki temu program zawsze będzie wykorzystywał minimalną ilość pamięci;
Koniec końców i tak wszystko zależy od przypadku, jednak jeśli dany formularz nie musi być cały czas widoczny to nie powinien zajmować pamięci.