Aplikacja MDI i kolejność MainForm

0

Witam. Mam taki problem. Piszę aplikację MDI. Jednak nie mogę sobie poradzić z pewnym problemem. Pierwszą formą którą chce wyświetlać to okienko logowania, dopiero wtedy (jak będzie prawidłowe hasło i login) ma sie otworzyć główne MainForm. Zawsze wyznaje zasadę, że w pamięci nie powinny "wisieć" moduły z których się nie korzysta. Tak wiec chce aby najpierw był Create formy logowania, niszczenie a dopiero potem Create MainForm, lecz chyba tak się nie da :-| . Jeżeli w źródłach projektu, w begin... end. dam jako pierwsze Application.CreateForm formy logowania to staje się ona formą główną i podczas jej niszczenia przy pozytywnym zalogowaniu zamykana jest cała aplikacja. Natomiast jeżeli pierwszą będę tworzył MainForm to pojawia mi się ona przed zalogowaniem. Jedyne wyjście jakie widzę to ukrywać MainForm i pokazywać najpierw forme logowania, ale teoretycznie ktoś może inną aplikacją, korzystając z funkcji WinAPI, wyświetlić sobie MainForm bez podawania loginu i hasła. Co prawda i tak nie będzie miał dostępu do żadnego modułu, bo te prawa są przyznawane na etapie logowania, ale sam fakt. Wiem że to skrajnie pesymistyczny przypadek, ale chciałbym to zrobić nie o tyle bezpieczniej o ile bardziej kompetentnie z punktu widzenia programowania. Można jakoś w trakcie wykonywania programu zmienić mainform aplikacji? Kolejne rozwiązanie to nie tworzenie formy logowania przez Application.CreateForm tylko normalnie i pokazywać to okno jako modalne. Dzięki temu MainForm jest główną formą aplikacji ale pokazuje się dopiero po zamknięciu okna logowania (trzeba tylko uważać na exceptiony, na tym etapie nie ma chyba jeszcze obsługi kolejki komunikatów i aplikacja jest zabijana przy jakimkolwiek wyjątku):

begin
  Application.Initialize;
  with TLoginForm.Create(Application) do
    Showmodal;
  Application.CreateForm(TBaseMainForm, BaseMainForm);
  Application.Run;
end.

Ale może ktoś ma inny pomysł?

0

Ten drugi pomysł jest OK. Na exceptiony trzeba zawsze uważać, ale po to jest testowanie. Ja robie tak jak podałeś, z tym że jeszcze od ModalResult'a uzależniam czy główna forma ma się odpalać czy nie.

0

Mam mały problem z modal result na tym etapie:

begin
  Application.Initialize;
  with TLoginForm.Create(Application) do
    if (Showmodal=mrOK) then
      Application.CreateForm(TBaseMainForm, BaseMainForm);
  Application.Run;
end.

Na formie logowania mam TBitBtn, kind = bkOK i modal result ustawiony na mrOK. I drugi TBitBtn z mrCancel. Obojętnie jaki klawisz wcisnę zwraca mi mrCancel. Mało kiedy używam okien modalnych, a jeszcze rzadziej wartości które zwracają. Coś robię nie tak?

1 użytkowników online, w tym zalogowanych: 0, gości: 1