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