No entiendo porque usas un formulario modal, éstos se usan para bloquear la aplicación y requerir al usuario cierta acción que precisa su intervención.
En cualquier caso y sin ver tu código de cierre, intuyo tu problema. Posiblemente tengas definida la variable frmRetirarTarjeta dos veces, una como global y otra como local en la función donde creas el formulario modal. A demás, posiblemente, tu Formulario frmRetirarTarjeta lo definiste como autocreado y no como disponible.
Si frmRetirarTarjeta es un autocreado esto te servirá:
Código:
// Mostrar
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Timer1->Enabled = true;
frmRetirarTarjeta->ShowModal();
}
// Cerrar
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
Timer1->Enabled = false;
frmRetirarTarjeta->Close();
}
En otro caso debes declarar frmRetirarTarjeta como global o como miembro de Form1 y proceder así:
Código:
// Global...
TfrmRetirarTarjeta *frmRetirarTarjeta;
// Mostrar
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Timer1->Enabled = true;
frmRetirarTarjeta = new TfrmRetirarTarjeta(this);
frmRetirarTarjeta->ShowModal();
Timer1->Enabled = false;
}
// Cerrar
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
Timer1->Enabled = false;
frmRetirarTarjeta->Close();
}
// Y definir el evento OnClose de TfrmRetirarTarjetapara destruir el formulario y liberarlo de la RAM
void __fastcall TfrmRetirarTarjeta::FormClose(TObject *Sender, TCloseAction &Action)
{
Action = caFree;
}
Saludos.