Microsoft Access 掲示板

ポップアップフォームで移動後の位置を自動で取得したい / 4

5 コメント
views
4 フォロー
4

上記リンク先は64ビット非対応なので、64ビットにも対応したものに下記得ました。

フォーム上にラベルとコマンドボタンを配置します。
フォームプロパティの「境界線スタイル」を「なし」に設定してタイトルバーを非表示にします。

フォームのモジュールに下記のコードを設定します。

Option Compare Database
Option Explicit
Private Declare PtrSafe Function SendMessage Lib "user32" Alias "SendMessageA" ( _
ByVal hwnd As LongPtr, ByVal wMsg As Long, ByVal wParam As LongPtr, lParam As Any) As Long
Private Declare PtrSafe Sub ReleaseCapture Lib "user32.dll" ()

Private Const WM_NCLBUTTONDOWN = &HA1
Private Const HTCAPTION = 2

Private Sub コマンド1_Click()
    DoCmd.Close acForm, Me.Name
End Sub

Private Sub ラベル0_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Button And acLeftButton Then
        ReleaseCapture
        Call SendMessage(Me.hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&)
    End If
End Sub

Private Sub ラベル0_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Debug.Print "ドラッグ移動しました", Me.WindowLeft, Me.WindowTop
End Sub

上記でラベル部分をクリックしてドラッグするとフォームを移動できます。
マウスボタンを開放すると、イミディエイトウィンドウに、移動後のフォームの位置が出力されます。
Accessウィンドウのクライアントエリアの左上を原点とする座標位置になります。

通報 ...