#662 | マウスポインタの近くでフォームを開くには? | フォーム、VBA | |
Accessのプログラムで別のフォームを開いた際、それがどの位置にどのように表示されるかは、開かれる側のフォームデザインや開き方に則ります。 タブ付きドキュメントのふつうのフォームであれば1つのタブとして開きます。デザイン上でポップアップの指定がしてあれば、ふつうに開いてもダイアログのように1つのウィンドウとして最前面に表示されます。またその指定がなくてもDoCmdのOpenFormメソッドでダイアログ指定をすればダイアログとして開きます。 またダイアログとして開かれる場合、フォームに自動中央寄せ”はい”が設定してあれば画面中央の位置に表示されますし、”いいえ”なら最後にデザインが保存された位置に表示されます。またプログラムを使って開く時点で動的に位置を移動させることもできます。 ここでは、画面上のどの位置にマウスのポインタがあったかによってダイアログの表示位置を変える方法について説明します。 具体的には、レコードが一覧表示されているフォーム上の任意の欄をダブルクリックしたとき、その欄、すなわちマウスをダブルクリックした位置の近くに別のフォームを表示させるような操作を行ってみます。 なお、この内容は『#661 フィールドにコメント機能を付けるには?』の機能拡張となっています。データシートのフォーム上のある3つのテキストボックスをダブルクリックした際に表示される「fdlgコメント編集」フォームの表示位置を、ダブルクリックしたテキストボックスの近くに設定するという操作を行っています。2つのフォームのデザインや基本動作についてはそちらを参照してください。 このような動作を行わせるには、開かれる側の「fdlgコメント編集」フォームにプログラムを記述します。「Load/読み込み時」イベントプロシージャにマウスポインタの現在位置を取得したりそれに合わせてフォームの位置を変更したりするコードを記述します。それによって実際にはユーザーにフォームが見えるようになる前に移動されますので、ユーザーからはあたかも初めからその位置に開いたように見えます。 そのプログラムのコード例は次のようなものです。 ここでは、マウスポインタ位置の取得、フォームのウィンドウ位置の移動をWindows APIで行っています。そのため、まず「Declarationsセクション」にWindows APIに関する宣言を記述しています。 そして、「Load/読み込み時」イベントプロシージャにそれらの関数を使ってポインタ位置の取得・フォーム位置の設定を行うコードを記述しています。 Option Compare Database Option Explicit 'Windows APIの宣言 Private Type POINT X As Long Y As Long End Type Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINT) As Long Private Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, _ lpRect As RECT) As Long Private Declare Function MoveWindow Lib "user32" (ByVal hwnd As Long, ByVal X As Long, _ ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, _ ByVal bRepaint As Long) As Long Private Sub Form_Load() 'フォーム読み込み時 Dim Mp As POINT Dim MeRect As RECT Dim lngLeft As Long Dim lngTop As Long Dim lngWidth As Long Dim lngHeight As Long 'マウスポインタの位置を取得 GetCursorPos Mp 'このフォームのウィンドウ情報を取得 GetWindowRect Me.hwnd, MeRect 'このフォームをポインタ周辺に移動 With MeRect lngWidth = .Right - .Left lngHeight = .Bottom - .Top lngLeft = Mp.X - (lngWidth \ 2) + 130 'この130は適当に調整 lngTop = Mp.Y - (lngHeight \ 2) + 70 'この70は適当に調整 End With MoveWindow Me.hwnd, lngLeft, lngTop, lngWidth, lngHeight, 1 End Sub 上記のコードにおいて「'この130は適当に調整」といったコメントがありますが、ここに指定する数値は、より細かくマウスポインタとフォームの位置関係を微調整するためのものです。たとえば、
実行例:(それぞれ矢印がマウスをダブルクリックした欄を表しています) 関連Tips: #661 フィールドにコメント機能を付けるには? |
|||
|
Copyright © T'sWare All rights reserved |