Yo repasaria la variable TApplication::Components y TApplication::ComponentCount.
Para la segunda cuentión, yo lo resuelvo así:
Código:
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
char AppName[] = "Nombre Aplicacion";
Application->Title = "XXNombre AplicacionXX"; // Cambio momentaneamente el nombre para no encontrarma a mi mismo...
HWND W = ::FindWindow("TApplication", AppName); //Busco si la ventana existe...
Application->Title = AppName; // Recupero el verdadero nombre de la aplicación
// W!=0 indica que esta abierta. W es el Handle de esa ventana
if(W){
// Restauro la ventana de la aplicación que esta ya abierta
ShowWindow(W, SW_RESTORE);
SetForegroundWindow(W);
Application->Terminate();
return 0;
}
// Resto normalmente
try
{
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
return 0;
}
//---------------------------------------------------------------------------
Saludos.