テキストボックスの座標を取得する方法です。これによりテキストボックスのすぐ傍にフォームを表示することができます。移動はDoCmd.MoveSizeで取得した座標を指定します。
使い方は、
Me.テキスト0.SetFocus Dim lngX As Long, lngY As Long Call Get_Position(lngX, lngY) MsgBox "X=" & lngX & ":Y=" & lngY & ""
- RT:右上
- LT:左上
- RB:右下
- LB:左下
モジュール
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal nIndex As Long) As Long
Private Declare Function GetFocus Lib "user32" () As Long
Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Private Const INCH_TO_TWIP As Integer = 1440 '1インチあたりTWIP値
Private Const LOGPIXELSX As Long = 88 'X方向1論理インチあたりのピクセル値
Private Const LOGPIXELSY As Long = 90 'Y方向1論理インチあたりのピクセル値
Public Sub Get_Position(ByRef X As Variant, ByRef Y As Variant, Optional point As String = "RT")
Dim WindowHandle As Long
Dim DeviceContextHandle As Long
Dim WindowRect As RECT
WindowHandle = GetFocus()
If WindowHandle = 0 Then
X = 0
Y = 0
Exit Sub
End If
GetWindowRect WindowHandle, WindowRect
DeviceContextHandle = GetDC(WindowHandle)
Select Case point
Case "LT"
X = (WindowRect.Left / GetDeviceCaps(DeviceContextHandle, LOGPIXELSX)) * INCH_TO_TWIP
Y = (WindowRect.top / GetDeviceCaps(DeviceContextHandle, LOGPIXELSY)) * INCH_TO_TWIP
Case "RT"
X = (WindowRect.right / GetDeviceCaps(DeviceContextHandle, LOGPIXELSX)) * INCH_TO_TWIP
Y = (WindowRect.top / GetDeviceCaps(DeviceContextHandle, LOGPIXELSY)) * INCH_TO_TWIP
Case "LB"
X = (WindowRect.Left / GetDeviceCaps(DeviceContextHandle, LOGPIXELSX)) * INCH_TO_TWIP
Y = (WindowRect.Bottom / GetDeviceCaps(DeviceContextHandle, LOGPIXELSY)) * INCH_TO_TWIP
Case "RB"
X = (WindowRect.right / GetDeviceCaps(DeviceContextHandle, LOGPIXELSX)) * INCH_TO_TWIP
Y = (WindowRect.Bottom / GetDeviceCaps(DeviceContextHandle, LOGPIXELSY)) * INCH_TO_TWIP
Case Else
X = (WindowRect.right / GetDeviceCaps(DeviceContextHandle, LOGPIXELSX)) * INCH_TO_TWIP
Y = (WindowRect.top / GetDeviceCaps(DeviceContextHandle, LOGPIXELSY)) * INCH_TO_TWIP
End Select
End Sub
