フォームを常に手前に表示する |
フォームを常に手前に表示する (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)で表示してメニューのフォームを作ったりが簡単にできます。 |