Antes de abrir cada child, comprueba si ya está abierta. Por ejemplo:for(int i = MDIChildCount-1; i >= 0; i--)
if (MDIChildren[i]->Caption == "NONAME1")
ShowMessage("No se puede abrir");
Esto miraría si tienes una Child llamada NONAME1, y si está creada, te mostraría el mensaje de aviso. (cambialo de forma que simplemente, no se cree una nueva child).
Para lo del código y el bloqueo, lo mas fácil es usar un "Password Dialog" de los que vienen en File->New...->Dialogs.
Retócalo a tu gusto, y para mostrarlo: PasswordDlg->ShowModal();
Roberto Porcar
Club Builder