Nie możesz umieszczać odwołania do Form2 w zdarzeniu OnCreate Form1, gdyż to zdarzenie jest wywoływane w trakcie tworzenia formularza, więc Form2 jeszcze nie istnieje, a co za tym idzie nie można się do niego odwoływać. Umieść tą instrukcję w zdarzeniu OnShow formularza Form1.
Możesz to rozwiązać też inaczej, jeżeli Form2 ma się pojawić przed Form1, a opis tego znajdziesz
w serwisie Cyfrowy
Baron w dziele: różne 2 | żądanie hasła podczas logowania. Jest tam opisany sposób na uruchomienie okna z polami do logowania i pobierania hasła, ale równie dobrze może to być Twoje okno Form2.
Znajdziesz tam taki kod:
- Kod: Zaznacz cały
/---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <memory>
#include "PWDialogUnit.h"
USERES("Project1.res");
USEFORM("Unit1.cpp", Form1);
USEFORM("PWDialogUnit.cpp", PWDialog);
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
{
AnsiString error_msg("Nieprawidłowe hasło! Dostęp zabroniony!");
std::auto_ptr<TPWDialog> PWDialog(new TPWDialog(NULL));
if(PWDialog->ShowModal() == mrOk)
{
if(PWDialog->PasswordEdit->Text != "jakieś hasło")
throw EAbort(error_msg);
}
else throw EAbort(error_msg);
}
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
Application->CreateForm(__classid(TPWDialog), &PWDialog);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
return 0;
}
//---------------------------------------------------------------------------
Jeżeli nie pobierasz hasła to powinno to chyba wyglądać tak - nie sprawdzałem:
- Kod: Zaznacz cały
/---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <memory>
#include "Form2.h" // pozmieniałem na Form2
USERES("Project1.res");
USEFORM("Unit1.cpp", Form1);
USEFORM("Form2.cpp", Form2); // pozmieniałem na Form2
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
{
std::auto_ptr<TForm2> Form2g(new TForm2(NULL)); // pozmieniałem na Form2
Form2->Show(); // pozmieniałem na Form2,
/* zmieniłem również ShowModal na Show ale okno Form2
nie powstrzyma tutaj uruchomienia Form1, gdyż nie jest
oknem modalnym, jeżeli chcesz modalne zastosuj ShowModal
program niczego nie sprawdza, po prostu wywołuje Form2 */
}
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
Application->CreateForm(__classid(TForm2), &Form2); // pozmieniałem na Form2
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
return 0;
}
//---------------------------------------------------------------------------
Pełen opis i sposób kodowania w podanej poradzie, koniecznie zajrzyj.