Microsoft Access 掲示板

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

5 コメント
views
4 フォロー
2
hiroton 2022/12/08 (木) 17:59:48 a043c@f966d

いっそタイトルバー無くしてフォームのMouseMoveイベント使ってフォームをドラッグ移動できるようにするとか

通報 ...
  • 3

     なるほど、その手がありましたね。
    下記で、方法を紹介してます。

    タイトルバー以外をドラッグしてフォームを移動させる - hatena chips

  • 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ウィンドウのクライアントエリアの左上を原点とする座標位置になります。