フォームの入れ替わり(?)を防ぐには

解決


・∀・  2010-03-25 17:43:16  No: 38106  IP: [192.*.*.*]

Delphi5(UP1)、WindowsXPで開発しています。

【A.exe】では、"FormA1"から"FormA2"をShowModalで表示し、
"FormA2"から【B.exe】をコールしています。
【B.exe】を終了(画面に終了ボタンがあり、それをクリック)すると、
"FormA1"と"FormA2"が入れ替わって表示されてしまいます。

この現象を回避する方法をご存じの方、アドバイスいただけないでしょうか。

何とぞよろしくお願い致しますm(_ _ )m

編集 削除
なな  2010-03-25 18:25:51  No: 38107  IP: [192.*.*.*]

よくわかりませんけど、
FormA1  で  FormA2.ModalShow
とやってA2を表示しますよね。

それでB.exeの終了を検知したら、  FormA2.ModalResult := mrOK
でA2を閉じてしまえばいいんじゃないでしょうか。

編集 削除
けど  2010-03-25 22:07:53  No: 38108  IP: [192.*.*.*]

入れ替わる事象は再現できませんでしたが
FormA1 から FormA2 を呼ぶときいっそのこと隠してしまう
というのはどうでしょう
procedure TForm1.Button1Click(Sender: TObject);
begin
  Hide;
  try
    FormA2.ShowModal;
  finally
    Show;
  end;
end;

編集 削除
KHE00221  2010-03-25 23:46:28  No: 38109  IP: [192.*.*.*]

こう?
procedure TFormA2.CreateParams(var Params: TCreateParams);
begin
    inherited CreateParams(Params);
    Params.WndParent := FormA1.Handle;
end;

編集 削除
こはく  2010-03-26 09:54:33  No: 38110  IP: [192.*.*.*]

B.exe が終了するまで、FormA2に帰ってこない作りであるなら、
   B.exe のコール
   BringWindowToTop(FormA2.Handle);
として、FormA2を前面に出す、というのはどうでしょう。

編集 削除
・∀・  2010-03-26 11:05:27  No: 38111  IP: [192.*.*.*]

・∀・です。

なな様、けど様、KHE00221様、こはく様、
ご回答ありがとうございます。

こはく様よりご教示いただいた内容でいけそうです。
助かりました!
ありがとうございましたm(_ _ )m

また、お力添えをいただいた
なな様、けど様、KHE00221様、
ありがとうございました。
…難しかった(おバカな私は理解できなかった)ので、
勉強させていただきます。

皆様、本当にありがとうございました。

編集 削除