En este caso, todo cambia radicalmente:
un form Mdichild no lo puedes poner modal, así que creamos un evento, y al cerrar la ventana de consulta, miramos si alguien está esperando por ese evento.
Código Delphi
[-]
type
type TinformarA: procedure (const codigoSeleccionado:integer) of object;
TFormaConsultas = class(TForm)
private
FInforma:TinformarA;
FCodigo: Integer;
public
property Codigo: Integer read FCodigo write FCodigo;
property InformarA:TinformarA read Finforma, write Finforma default nil;
end;
En el Onclose de esta ventana:
if Assigned(Finforma) then Finforma(Codigo);
Form1, Form2 y Form3 harían lo siguiente:
Código Delphi
[-]
FormConsulta := TformaConsulta.Create(...);
FormConsulta.InformarA := llamamePepe;
por supuesto, Form1, Form2 y Form3 deben tener un prodecimiento: LlamamePepe;
Código Delphi
[-]
procedure Tform1.llamamePepe(const Codigo:integer);
begin
showmessage(' El form de consulta se ha cerrado y ha seleccionado' +
inttostr(codigo));
end;
Atención!!!: no se informa a las 3 ventanas, solo a la ultima que haya llamado a FrmConsulta.
Tambien se me ocurre que ese evento se lance cuando se cambia el codigo de cliente en el Formconsulta, esta rallada quedaría así:
Código Delphi
[-]
type TinformarA: procedure (const codigoSeleccionado:integer) of object;
type
TFormaConsultas = class(TForm)
private
FInforma:TinformarA;
FCodigo: Integer;
procedure SetCodigo(Value:integer);
public
property Codigo: Integer read FCodigo write SetCodigo;
property InformarA:TinformarA read Finforma, write Finforma default nil;
end;
procedure TformaConsulta.SetCodigo(value:integer);
begin
if Value <> Fcodigo then
begin
Fcodigo := Value;
if assigned(Finforma) then Finforma(Fcodigo);
end;
No sé si me he rallado un poco

pero la cosa funciona
Saludos