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
基本的には無理かと。
Win API を駆使すれば可能かもしれませんが、難易度はかなり高そう。
いっそタイトルバー無くしてフォームのMouseMoveイベント使ってフォームをドラッグ移動できるようにするとか
なるほど、その手がありましたね。
下記で、方法を紹介してます。
タイトルバー以外をドラッグしてフォームを移動させる - hatena chips
上記リンク先は64ビット非対応なので、64ビットにも対応したものに下記得ました。
フォーム上にラベルとコマンドボタンを配置します。
フォームプロパティの「境界線スタイル」を「なし」に設定してタイトルバーを非表示にします。
フォームのモジュールに下記のコードを設定します。
上記でラベル部分をクリックしてドラッグするとフォームを移動できます。
マウスボタンを開放すると、イミディエイトウィンドウに、移動後のフォームの位置が出力されます。
Accessウィンドウのクライアントエリアの左上を原点とする座標位置になります。
なるほど、そり記事は見たのですが思いつきませんでした。
ありがとうございました。