テキストボックスの座標を取得する。

テキストボックスの座標を取得する方法です。これによりテキストボックスのすぐ傍にフォームを表示することができます。移動は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

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください