メインのフォームからボタンのクリックで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
ボタンクリック時のソースに間違いがありました。正しくは以下の通りです。
'ボタンクリック時の処理
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
> 裏に隠れたメインフォーム(呼出元のフォーム)をクリックしたら、
> このメインフォームを最前面に表示したいのですが、うまくいきません。
> (Form_Clickイベントが取れません)
揚げ足を取るようですが、フォームを『クリック』すればちゃんとForm_Clickイベントが発生します。
IEを『常に最前面に表示』にしてますね。
普通に表示させても最前面に表示させることは出来ますが、それではダメなのでしょうか?
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
のような感じ。
とろさんのおっしゃる通り、裏でTrue DBGridを動作させているため常に最前面としないと前面表示したいフォームが裏へ回ってしまうのです。
でもとろさんに教えていただいた手法を実施したところ、うまくいきました。
どうもありがとうございました。