Hola.
El mensaje de error que te aparece es normal, es un aviso del depurador para el programador y no un mensaje de error que vaya a mostrarse al usuario. Si reanudas la ejecución del programa notarás que entra a la sección
catch, tal como lo esperas.
Puedes observar la diferencia si ejecutas la aplicación .exe desde fuera del IDE. Aun así, si quieres inhibir tal aviso, existe la opción
Exception Types to Ignore (en Delphi así se llama) en las opciones del depurador.
Por otra parte, quizá sea mejor idea utilizar la función
TryStrToInt (que imagino también existe en C++Builder). Es más adecuada para comprobar si una cadena de caracteres es un número entero válido o no.
Espero haber ayudado. Un saludo.
Al González.