他アプリに隠れるfsStayOnTop

解決


CT  2006-07-09 01:14:27  No: 22440

CTです。よろしくお願いします。
From1から、Form2を Create、Show
Form2からFormStyle fsStayOnTopのForm3を Create、Showした場合
Form2がフォーカスを得ても、Form3は前面にいます。
この状態で、他のアプリを起動すると、他のアプリが前面になります。

が、From1から、Form2を Create、Showmodalで表示し
Form2からFormStyle fsStayOnTopのForm3を Create、Showした場合は
Form2がフォーカスを得ても、Form3は前面にいます。
でも、この状態で、他のアプリを起動すると、他のアプリがForm2と
Form3の間になります。(Form3が最前面)

Form2は、Showmodalで  Form3(fsStayOnTop)はShowで表示
Form2を編集しつつForm3が前面にいる状態で
他アプリが起動した場合には、そのアプリが最前面になれば良いのですが
良い方法があれば、教えてください  よろしくお願いいたします。
(D7です。)


Fusa  2006-07-09 14:32:37  No: 22441

procedure TForm1.ApplicationEvents1Activate(Sender: TObject);
begin
  if Assigned(Form3) then
  begin
    if Form3.FormStyle = fsNormal then
    begin
      Form3.FormStyle := fsStayOnTop;
    end;
  end;
end;

procedure TForm1.ApplicationEvents1Deactivate(Sender: TObject);
begin
  if Assigned(Form3) then
  begin
    if Form3.FormStyle = fsStayOnTop then
    begin
      Form3.FormStyle := fsNormal;
    end;
  end;
end;

これでどうですか?
たぶん、お望みの動作だと思います。


CT  2006-07-09 19:26:01  No: 22442

Fusaさん、RESありがとうございました。
結果としては  やはり  なぜかForm3が最前面に居座りました。
ApplicationEventsを使ったこと無かったのですが
アプリケーションでアクティブ・非アクティブが正確に捕らえれることがわかりました。
実際のApでは、Form2上でメッセージボックスや他フォームの表示等
の表示の際に、Form3の扱いを一旦  非表示にしている事もあり
(邪魔になることがあるので)
Activateで、表示
Deactivateで  非表示として、他アプリの邪魔にならないように出来ました。
当初の質問の内容と少しずれましたが  目的は達成できました。
ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加