Sí, te explicas, pero sigo pensando que puedes usar el BeforePost e, incluso, el OnValidate de la siguiente manera:
Sabemos que cada vez que se produce un cambio en el contenido del Field, se dispara ese evento, no? Pues bien, hacemos que sólo se nos dispare 1 vez
Código Delphi
[-]
procedure TForm1.FieldValidate(Sender: TField);
begin
if Sender.AsString <> UpperCase(Sender.AsString) then
Sender.AsString := UpperCase(Sender.AsString);
end;
Con esto, la primera vez que entre se hará el UpperCase del contenido del campo, lo que hará disparar de nuevo el evento. Pero la segunda vez que entra, al ser el contenido igual, ya no se modificará su contenido por lo que no volverá a disparar el evento y se desharán las llamadas recursivas creadas
Espero te sirva