フォームを常に手前に表示する
                                                        玄関へお回り下さい。
フォームを常に手前に表示する      (009)
    
Option Explicit   'SampleNo=009 WindowsXP VB6.0(SP5) 2002.04.17

'指定のウィンドウのサイズ・位置・Zオーダーを設定する(P100)
Private 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

'ウィンドウをウィンドウリストの一番上に配置する
Private Const HWND_TOPMOST = (-1)
'ウィンドウの現在のサイズを保持する
Private Const SWP_NOSIZE = &H1&
'ウィンドウの現在位置を保持する
Private Const SWP_NOMOVE = &H2&


Private Sub
Form_Load()
  Dim retValue As Long
  '現在の位置とサイズでウィンドウリストの一番上に配置する
  retValue = SetWindowPos(Me.hwnd, HWND_TOPMOST _
        , 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)
'これでこのフォームが常に一番手前に表示されます。
End Sub



' 参 考
'hWndInsertAfteの値
' ウィンドウのZオーダーの配置を示す定数の宣言
  'ウィンドウをZオーダーの一番上に配置する
  'Private Const HWND_TOP = 0
  'ウィンドウをウィンドウリストの一番下に配置する
  'Private Const HWND_BOTTOM = 1
  'ウィンドウをウィンドウリストの一番上に配置する
  'Private Const HWND_TOPMOST = (-1)
  'ウィンドウをウィンドウリストの一番上(ただしほか のウィンドウが
  'HWND_TOPMOSTに配置されている場合はそのすぐ下)に配置する
  'Private Const HWND_NOTOPMOST = (-2)

'wFlagsの引数のフラグ
  'ウィンドウの現在のサイズを保持する
  'Private Const SWP_NOSIZE = &H1&
  'ウィンドウの現在位置を保持する
  'Private Const SWP_NOMOVE = &H2&
  'ウィンドウリスト内での現在位置を保持する
  'Private Const SWP_NOZORDER = &H4&
  'ウィンドウを自動的に再描画しない
  'Private Const SWP_NOREDRAW = &H8&
  'ウィンドウをアクティブにしない
  'Private Const SWP_NOACTIVATE = &H10&
  'ウィンドウのサイズ変更中でなくてもWM_NCCALCSIZEを送る
  'Private Const SWP_FRAMECHANGED = &H20&
  'ウィンドウを表示する
  'Private Const SWP_SHOWWINDOW = &H40&
  'ウィンドウを隠す
  'Private Const SWP_HIDEWINDOW = &H80&
  'クライアント領域の内容をクリアする
  'Private Const SWP_NOCOPYBITS = &H100&
  'オーナーウィンドウのZオーダーは変えない
  'Private Const SWP_NOOWNERZORDER = &H200&
  '再描画のときウィンドウを囲む枠も描画
  'Private Const SWP_DRAWFRAME = &H20&
  'SWP_NOOWNERZORDER と同じ
  'Private Const SWP_NOREPOSITION =&h200&


これらの定数はAPIビューアのウィンドウからコピーして下さい。
アドイン→APIビューア(初めてはアドインマネージャーから)→
APIビューアが開いたら→ファイル→テキストファイルの読み込み→
WINAPIのフォルダーを開く→Win32api.txtを開く

同一プロジェクト内でのフォームを前面に表示する。

Showメソッドにオーナーフォームを指定することで簡単に実現できます。
通常Showメソッドを使用する場合オーナーフォームを指定しないので、意外と知られていないテクニックのひとつです。

Form2.Show 1, Form1 のようにモーダルで指定するとForm2 が閉じられるまで Form1 にはフォーカスが移らずForm1の前面にForm2が表示されます。これを利用して自作のインプットボックス等やメッセージボックスを作ったり、又モードレス(Form2.Show 0, Form1)で表示してメニューのフォームを作ったりが簡単にできます。





2002/04/17