Si lees la ayuda del evento OnValidate, verás que para rechazar un valor debes lanzar una excepción. Al hacer esto, el foco no debería perderse puesto que, de hecho, la validación se hace antes de que se abandone el control.
En tu caso, podrías hacer así el evento OnValidate de tu campo:
Código Delphi
[-]
procedure TF_ModulDades.ParticipacioDIVENDRESValidate(Sender: TField);
begin
ParticipacioDIVENDRES.Value := UpperCase(ParticipacioDIVENDRES.Value);
if (ParticipacioDIVENDRES.Value <> 'S') and (ParticipacioDIVENDRES.Value <> 'N') then
raise Exception.Create('Valor no vàlid, sols S o N');
end;
O sea, en lugar de un simple ShowMessage, lanzas una excepción.
// Saludos