Ok, ya revise. Primero, ¿por que no usas ese teclado en vez de crear uno nuevo?
Segundo, no vas a poder evadir el codigo que tengas en el valid(), por lo menos si quieres que toda la solucion sea en Fox, no se si podrias evadirlo con el teclado que quiere el windows.Tercero ¿Para que lo quieres? Veo que la solucion sin el valid es algo complicada y habria que sopesar bien si te conviene usar otros controles con el editbox o richtextbox, ya que estos te darian tal vez ams propiedades para lograr lo que quieres. Basicamente la solucion seria asi: en Lostfocus del control donde se esta escribiendo guardas en una propiedad de la forma su NOMBRE (name) ademas tendrias que guardar en que posicion esta el cursor y linea (posiblemente otros datos). En el click del boton, agarras el valor del control que tenia el foco y le isertas en la posicion adecuada el valor correspondiente al de la tecla, despues pasas ese valor al control y le pones el foco con la posicion del cursor anteriomente definida. Checa propeidades como selstart o cosas por e estilo las cuales te pueden llevar a encontrar la posicion del cursor en los controles