呼出元のFormを最前面に表示するには?

解決


VB初心者  2004-03-15 18:59:15  No: 112354  IP: [192.*.*.*]

メインのフォームからボタンのクリックでCreateObjectを使用してIEを起動します。この時IEは最前面に表示させます。裏に隠れたメインフォーム(呼出元のフォーム)をクリックしたら、このメインフォームを最前面に表示したいのですが、うまくいきません。(Form_Clickイベントが取れません)
下記にボタンクリック時のソースコードを記載しますので、解決方法をお分かりの方はご伝授ください。よろしくおねがいします。(VB6.0 SP5)


'API宣言
Public Declare Function SetWindowPos _
                Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, _
                ByVal X As Long, ByVal Y As Long, ByVal Cx As Long, _
                ByVal Cy As Long, ByVal wFlags As Long) As Long

Public Const HWND_TOPMOST = -1
Public Const SWP_SHOWWINDOW = &H40

'ボタンクリック時の処理
Private Sub Command1_Click()
  Set ieApp = CreateObject("InternetExplorer.application")
  ieApp.Navigate "http://www.yahoo.co.jp"
  SetWindowPos ieApp.hwnd, HWND_TOPMOST, _
          ieApp.Left, ieApp.Top, ieApp.Width, _
          ieApp.Height, SWP_SHOWWINDOW
  Set ieApp = Nothing
End Sub

編集 削除
VB初心者  2004-03-15 19:05:45  No: 112355  IP: [192.*.*.*]

ボタンクリック時のソースに間違いがありました。正しくは以下の通りです。
'ボタンクリック時の処理
Private Sub Command1_Click()
    Dim ieApp As Object

    Set ieApp = CreateObject("InternetExplorer.application")
    ieApp.Navigate "http://www.yahoo.co.jp"
    SetWindowPos ieApp.hwnd, HWND_TOPMOST, _
            ieApp.Left, ieApp.Top, ieApp.Width, _
            ieApp.Height, SWP_SHOWWINDOW
    Set ieApp = Nothing
End Sub

編集 削除
nanashi  2004-03-16 12:00:43  No: 112356  IP: [192.*.*.*]

> 裏に隠れたメインフォーム(呼出元のフォーム)をクリックしたら、
> このメインフォームを最前面に表示したいのですが、うまくいきません。
> (Form_Clickイベントが取れません)

揚げ足を取るようですが、フォームを『クリック』すればちゃんとForm_Clickイベントが発生します。

IEを『常に最前面に表示』にしてますね。
普通に表示させても最前面に表示させることは出来ますが、それではダメなのでしょうか?

編集 削除
とろ  2004-03-16 12:48:55  No: 112357  IP: [192.*.*.*]

IE のウィンドウを常に最前面に表示にしているので、
フォームをクリックしても、 IE の後ろになるのは当然ですね。

普通なら、起動すれば、最前面に表示されます。
しかし、特殊な方法で(裏で何か特殊な処理が
動いている状態で)起動した場合、最前面に表示されないことがあります。
# 私も以前そのような状態になったことがあります。

その時は、仕方ないので、
『最前面に表示後、最前面表示を解除』というような
情けない方法を取っていました。

'* 一旦、常に最前面に表示
SetWindowPos ieApp.hwnd, HWND_TOPMOST, _
            ieApp.Left, ieApp.Top, ieApp.Width, _
            ieApp.Height, SWP_SHOWWINDOW
'* 常に最善面表示を解除
SetWindowPos ieApp.hwnd, HWND_NOTTOPMOST, _
            ieApp.Left, ieApp.Top, ieApp.Width, _
            ieApp.Height, SWP_SHOWWINDOW

のような感じ。

編集 削除
VB初心者  2004-03-31 14:32:07  No: 112358  IP: [192.*.*.*]

とろさんのおっしゃる通り、裏でTrue DBGridを動作させているため常に最前面としないと前面表示したいフォームが裏へ回ってしまうのです。
でもとろさんに教えていただいた手法を実施したところ、うまくいきました。
どうもありがとうございました。

編集 削除