Algo parecido a la solución de
ecfisa es lo que hago yo, pero no en el evento OnShow, pues puede darse mas veces si ocultamos y mostramos el Form.
Yo lo hago en el WinMain:
Código:
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
Application->Initialize();
TLogin *Log = new TLogin(0);
if(Log->ShowModal() == mrOk)
Application->CreateForm(__classid(TForm1), &Form1);
delete Log;
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
return 0;
}
Una solución a la propuesta de hacerlo en el OnShow es colo car una bandera estática:
Código:
void __fastcall TfrMain::FormShow(TObject *Sender)
{
static bool Primera_vez = true;
if(Primera_vez){
frLogin = new TfrLogin(this);
int ExitResult = frLogin->ShowModal();
delete frLogin;
if (ExitResult == mrCancel)
Application->Terminate();
Primera_vez = false;
}
}
Aún así, prefiero la primera técnica pues de esa manera nunca se crea el formulario principal.
Saludos.