Delphi7/WinXP/IE7 です。
ボタンを1つ配置しただけのActiveフォームを新規に作成し、ボタン押下時にフォーム(同様に新規作成)をModalで表示するプログラムを作成しました。
IE6では問題なく動作(ボタンを押下するとModalフォームがIEの前面に表示される)するのですが、IE7ですとModalフォームがIEの背面に表示されてしまします。
しかも、Modalで表示しているにもかかわらず呼出し元フォーム(IE)を操作できてしまいます。
IE7でもIE6と同様の動作にするにはどうしたら良いでしょうか?
プログラムを変更せずに対応する事は可能でしょうか?(インターネットオプションの設定を変更する等)
解決方法をご存知の方いらっしゃいましたらご教授の程お願い致します。
【ボタン押下時処理】
procedure TTest.Button1Click(Sender: TObject);
var
frmTest: TForm1;
begin
try
try
frmTest := TForm1.Create(Self);
with frmTest do begin
ShowModal;
Release;
end
finally
FreeAndNil(frmTest);
end;
except
on E:Exception do begin
ShowMessage(E.Message);
end;
end;
end;
IE6とIE7の振舞いの違いは個人的に興味があるのですが、今ひとつご質問の状況がわかりません。
>>しかも、Modalで表示しているにもかかわらず呼出し元フォーム(IE)を操作できてしまいます。
1. 呼出し元フォーム(IE)とは?
呼び出し元フォームとは、この【ボタン押下時処理】をする今作ろうとしているDelphiアプリではないのですか?
DelphiアプリとIEには何の関係もありませんから、ShowModalでもIE6、IE7のどちらも操作できて当たり前と思います。むしろ、IE6が操作できないとしたら、それも気になります。
2. 【ボタン押下時処理】のソースコードでなぜIEが関係するのか?
このソースコードのどこにもIEウインドウを操作する部分が見当たりません。
IEとの前後関係とは、このDelphiアプリを実行したときにたまたま開いているIEウインドウとの前後関係ということですか?
そして、それも、ボタンを押すので、当然アクティブなのはDelphiアプリと思いますが、それにより開くfrmTestの表示位置が非アクティブなIEウインドウの位置とかさなっており、IE6の場合にはその前面になるけど、IE7だとIE7の背後になるということでしょうか?
こんにちは.Mr.XRAYです.
>しかも、Modalで表示しているにもかかわらず呼出し元フォーム(IE)を操作できてしまいます。
テストしてみました.
テスト環境は,Windows Vista + Delphi2007 + IE 7.0.6000.16681です.
私の環境ではフォームは前面に表示されましたが,呼び出し元のActiveFormは操作
できてしまいます.
IE7はいろいろ変更があるようです.
マイクロソフトのサイトに情報があったような気もします.
IE7問題(爆笑問題という名前もありますね)さんも,もし,何かわかったら教えてください.
Mr.XRAYです.追記です.
>私の環境ではフォームは前面に表示されましたが,呼び出し元のActiveFormは操作
Windows XP(SP) + Delphi7 + IE
のテスト環境では,この現象は発生しませんでした.
クリックして表示されるフォームはIEの前面(on)に,このフォームが表示
されている間はIE6上(in)のActiveXフォームは操作できませんでした.
失礼!!
Windows XP(SP) + Delphi7 + IE
このIEはIE6のことです.
レスありがとうございます。
返信の遅くなり申し訳ありません。
>おも さん
1ですが、呼出し元フォームとはDelphiアプリですが、ActiveフォームなのでIE上に表示(埋め込まれて)います。
ですのでShowModalで子画面を表示した場合、IEが操作できなくなるのが正常な動作です。
2ですが、1への回答の通りです。
>Mr.XRAY さん
マイクロソフトの情報サイトなど色々と調べてはいるのですが、いまだ解決には至りません。
Mr.XRAYさんの環境ではフォームが前面に表示されるとの事ですが、確認したところ確かに環境によってはフォームが前面に表示されるようです。
ただその環境の違いの確認は行えない(そのPC環境を確認できない)為、何が違うのかは不明です。
IEかWindowsになんらかのパッチがあたっているのかもしれないと思い探していますが、今のところ見当たりません。
引き続き調査中ですので、何か解りましたらココへまた書き込みます。
なお、「爆笑問題」という名前は私とは関係ありません。
(ココへの質問は初なので)
もうすでに入手しているかも知れませんが,参考に.
また,直接関係あるかどうかはわかりませんが,マイクロソフトの資料です.
Internet Explorer 7 における機能の追加・変更点一覧
http://download.microsoft.com/download/9/4/6/946cbf5d-c4c2-4b80-b7f7-bdb95c9bc57c/IE7Compatibility_v1_0.doc
IE7では,Shellの機能とIE本来の機能が分離されました.
例えば,IE6まではShellの機能を利用して,
IEのURLに C:\ とタイプすればドライブCをリスト表示できました.
IE7では別の窓でエクスプローラが起動して表示します.
また,IE6までは,ワードやエクセルの文書もファイルパスを指定すればIE上
に表示できましたが,IE7では別窓で開きます.
(レジストリを操作すればIE7中に表示できます)
遅レスで申し訳ありません。
>Mr.XRAY さん
情報ありがとうございます。
この情報も踏まえて最近また調査していますが、Bestな解決にはいたりません。
子画面を呼び出す前に親画面を「Hide」すれば
・親画面の上(on)に子画面が表示される。
・子画面表示中親画面を操作できない。
はとりあえず実現できました。
ただ動作的には問題ありませんが、見た目的にいまいちではあります。
(IEは表示されたままで、中のActiveFormのみ消える為)
子画面表示中に親画面を操作する事はないので、IEごと見えなくしてしまうのも手かと思っています。
(APIなどで見えなくする?…など)
「Hide」以外の方法で同じ結果を得られる方法が見つかればまたココへ書き込み致します。
ツイート | ![]() |