Yo creo que la mejor opcion de las mencionadas anteriormente para lo que quieres es la de on key press, porque al momento de presionar la tecla te verifica que sea numerica y es ahi donde te mostraria el mensaje de error...
Código Delphi
[-]if not(key in['0'..'9', #8]) then
ahi muestras tu mensaje de error y le das abort, para que no se escriba la tecla... lo de #8 lo pones si quieres que puedan borrar con el backspace.