ShellExecuteでIEを起動元フォームの上で起動するには?


よしぞう  2008-09-05 19:49:30  No: 31833

現在ボタンクリックでIEを起動するものを作っています。
表示されるIEが呼び出し元のフォームの下に出てしまいます。
それと表示されるサイズと場所を指定したいのですが、上手くいきません。
どなたか解決方法をご存知でしたらご教示お願いします。


めじな  2008-09-05 22:28:34  No: 31834

ソースもバージョンもないので返答に困ってしまいますが・・・
私の環境でのテストPGは問題なくIEが上に出ます。

Delphi2007 + WinXP Pro SP3


よしぞう  2008-09-05 23:25:42  No: 31835

めじなさん、
ご返答ありがとうございます。
サンプルソースを記述します。

動き的にはIEが立ち上がった後にdelphiのフォームが上に載る形になります。
当方もdelphi2007でWinXP Pro Sp3  です。

大変申し訳ございませんがよろしくお願いいたします。

program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons,ShellAPI;

type
  TForm1 = class(TForm)
    BitBtn1: TBitBtn;
    procedure BitBtn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);
var
  HTMLPath:String;
begin
  HTMLPath:='http://maps.google.co.jp/maps?f=q&hl=ja&geocode=&q=東京都港区港南2-15-2&z=16';

  ShellExecute( Handle
               ,'open'
               ,'iexplore'
               ,PChar(HTMLPath)
               ,''
               ,SW_RESTORE );

end;

end.


monaa  2008-09-06 04:19:58  No: 31836

ん?
目的の動作をしているような…
Form1の上にIEきてますよ。
ちなみに普通、上というと手前側、
つまり隠れていないものをさします。

>>動き的にはIEが立ち上がった後にdelphiのフォームが上に載る形になります。
こちらが目的でしょうか?

あと、フォームを扱う場合、親子の関係もあります
Form1とButton1の様な関係です。
その辺がはっきり知りたいです。


よしぞう  2008-09-06 19:31:52  No: 31837

monaaさん
ご返信ありがとうございます。

自分のマシンでテストすると
ボタンをクリックした直後はIEがform1の上で立ち上がるのですが
IEが読み込み中になっている時に、form1の下に隠れてしまいます。
というか、form1がIE上に出てくるような感じ(どっちも同じことですが)です。

その原因が分からずに困っています。

マシンに依存するのかと思い、コンパイルして違うマシンで使用してみたところ、同じ現象が現れます・・・

どなたか同じ現象で悩んでおられる方はいらっしゃらないでしょうか?

また、IEの表示場所の座標指定は出来ますでしょうか?
よろしくお願いいたします。


Kaede  2008-09-06 20:50:39  No: 31838

以前に同じ悩みに遭遇しましたが↓で解決しました。

procedure TForm1.FormCreate(Sender: TObject);
begin
  show;
end;


よしぞう  2008-09-06 21:15:36  No: 31839

kaedaさん
ご返答ありがとうございます。
Form1がIEの下になって困っているのではなく、
Form1がIEの上になるので困っています。

皆さんは普通に呼び出したIEが呼び出し元のフォームの
上で開くのでしょうか?・・・・

なぜなんでしょう・・・凹みます↓


よしぞう  2008-09-06 21:52:06  No: 31840

追記です。

この現象はIE7のみで起きるようです。
IE6だと問題ないのですが、IE7だとだめでした。


Kaede  2008-09-06 21:55:03  No: 31841

ShellExecuteのパラメータSW_RESTOREをSW_SHOWにしたらどうですか?


Mr.XRAY  2008-09-06 22:26:08  No: 31842

テストしてみました.
Windows XP(SP2) + Delphi2007 + IE6

(1) 新規にプロジェクトを作成
(2) BitBtnを配置
(3) よしぞうのBitBtn1Clickのコードをそのままコピペ
(4) コンパイルして実行(IDE上)
(5) Form2上のBitBtnをクリック(私の場合,理由があって,新規FormはForm2となる)
(6) IEが起動してForm2の上に表示され,Form2はIEの裏に隠れる

次に
Form2のFormStyleプロパティの値をfsStayOnTopにして実行

IEが起動してForm2の裏側に表示され,Form2はIEの上に表示されている.

次に,このプロジェクトを
Windows Vista + Delphi2007 + IE7
の環境にコピーして同様のテストを行いましたが,結果は同じでした.
なお,IEを起動しておいて実行した結果も同じです,
この場合,新たにIEが起動しました.

他になにか設定があるんでしょうか
う〜ん.わかりませんね.IE7だけで発生するんですよね.
参考までに.


よしぞう  2008-09-06 22:50:15  No: 31843

Kaedeさん、Mr.XRAYさん 
返信ありがとうございます。

パラメータに関しては
すべて試してみましたが、駄目でした。
IE7でだけ駄目って・・・・すでに標準になっているブラウザなのに・・・


ttt  2008-09-06 23:11:58  No: 31844

あまり関係ないとは思うけど、
Application.MainFormOnTaskbarをFalseにしてみたらどうでしょう。

> また、IEの表示場所の座標指定は出来ますでしょうか?
特にShellExecuteにこだわる理由がなければ、
FindExecutableしてSTARTUPINFOを用意してCreateProcessで。


よしぞう  2008-09-10 00:24:50  No: 31845

ttt さん
Application.MainFormOnTaskbar  は関係ないようです・・・
う〜〜〜ん。。。難しいです。。。


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

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






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