Yo en estos casos actúo así:
Código Delphi
[-]
type TBuscar = (bCliente, bFactura);
Function Buscar( BuscarEn:TBuscar; InternalOpen :Boolean):integer;
begin
Result := -1;
case BuscarEn of
bCliente :
with TFrmbusca.Create(nil) do
try
if ShowModal = mrOk then
Result := ValorSeleccionadoEnTFrmBusca;
finally
Free;
end;
end;
if (InternalOpen) then
if Result <> -1 then AbrirVentana(BuscarEn, Result);
end;
Desde cualquier sitio de la aplicación, llamo a la función buscar:
- Si InternalOpen es false, me devuelve el 'id' de esa tabla, es decir, el cliente que ha seleccionado el usuario en la ventana de búsqueda, por tanto, me sirve dicha rutina como un LookUp (cuando el usuario necesita buscar un valor).
- Si InternalOpen es true, ejecutará AbrirVentana y allí buscará si hay abierta una ventana de tipo cliente, la trae al frente y hace visualizar el cliente elegido en la búsqueda.
Como ves, la propia ventana modal no abre la mdiChild, sino que primero se cierra la modal y la rutina Busca es la que se encarga de abrir o no la mdiChild.