Hola oscarac.
Limitándome a los componentes estandard de Delphi, estuve probando a ver si le encontraba la vuelta de evitar el evento OnExit con la propiedad ActiveControl, GetPropInfo y GetPropValue.
Código Delphi
[-]
...
function TForm1.ValidarCampo(AComponent: TComponent; Campo: Variant): Boolean;
begin
Result:= True;
if AComponent.Tag = 1 then Result:= VarIsEmpty(Campo);
end;
procedure TForm1.ActiveControlChange(Sender: TObject);
var
PropInfo: PPropInfo;
begin
PropInfo:= GetPropInfo(ActiveControl, 'Text');
if (PropInfo <> nil) and not
ValidarCampo(ActiveControl,GetPropValue(ActiveControl,'Text')) then
ShowMessage('Error campo vacío');
...
end;
Y si bíen evalúa ,lo hace al ingreso del control y no a la salida, y ya estoy medio dormido para seguir probando...
De todas formas tendrías que reescribir código y no es lo que buscas según leo en uno de tus últimos mensajes.
Creo que crearte o derivar un componente que evalue el valor del campo en el evento OnExit va a ser la opción más sencilla. Pero no te extrañe que mañana encuentres respuesta, hay muchísimos que de este tema saben mas que yo.
Un saludo.