Si no me equivoco, sucede que cuando creas una ventana desde delphi 7, bien creando tu propio form, con un showmessage o con un messagedlg, al final y siguiendo la vcl vas a llegar al
Código Delphi
[-]
TCustomForm.CreateWindowHandle(const Params: TCreateParams)
y dentro a la llamada a la api en cuestion bien a
Código Delphi
[-]
WindowHandle := SendMessage(Application.MainForm.ClientHandle,
WM_MDICREATE, 0, Longint(@CreateStruct));
http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
o a
Código Delphi
[-]
CreateWindowEx(ExStyle, WinClassName, Caption, Style,
X, Y, Width, Height, WndParent, 0, WindowClass.hInstance, Param);
http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
Según los parametros que en útima instancia se le esten pasando a CreateWindowHandle. Bien, si no me equivoco al llamar a otra aplicación con ShellExecute, esa otra aplicación pasa a estar activa mientras la nuestra pasa a segundo plano. Con la nuestra en segundo plano al llamar amn showmessage o messagedlg al final lo que hace es enviar al sistema un mensaje WM_MDICREATE creando una nueva ventana que tiene como "padre" en el zorder al mainform. Lo que creo es que como nuestra aplicación no está activa la ventana se crea efectivamente pero no como esperamos.
Siento no poder ser de mucha ayuda pero si ya has sido capaz de llegar hasta ese punto yo solo probaría con ese form propio asegurandote de que el padre y el owner es el form desde el que se llama para que finalmente la llamada a la api sea a createWindowEx y el wndParent sea el form desde el que se llama (si no me equivoco el activo en nuestra aplicación). Creo de veras que de este modo podria solucionarse el problema.