Microsoft Access 掲示板

フォームの境界線スタイル「なし」の設定で、サイズ調整可能の設定時と同等の機能を実装したい / 1

3 コメント
views
4 フォロー
1

最初、拡張ズームボックス関数 - hatena chipsを参考に、API の SetWindowLong で何とかしようと苦戦しましたが、うまくいきませんでした。

ふと、下記を思い出して、
タイトルバー以外をドラッグしてフォームを移動させる - hatena chips
これを参考にSendMessageで右下枠をクリックしたことにすればうまくいきました。

フォームの右下にラベルを配置して、下記のように設定します。

名前 lblResize
水平アンカー 右
垂直アンカー 下

フォームのモジュールを下記のように記述します。

Option Compare Database
Option Explicit

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

Private Const WM_NCLBUTTONDOWN = &HA1
Private Const HTCAPTION = 2
Private Const HTBOTTOMRIGHT = 17

Private Sub lblResize_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, HTBOTTOMRIGHT, 0&)
    End If
End Sub

以上です。ラベルを使用しましたが、四角形コントロールやイメージコントロールでもOKです。

右下以外でもサイズ変更したい場合は、下記を参考にConst宣言してください。

HTLEFT            10        可変枠の左辺境界線
HTRIGHT           11        可変枠の右辺境界線
HTTOP             12        可変枠の上辺境界線
HTTOPLEFT         13        可変枠の左上隅
HTTOPRIGHT        14        可変枠の右上隅
HTBOTTOM          15        可変枠の下辺境界線
HTBOTTOMLEFT      16        可変枠の左下隅
HTBOTTOMRIGHT     17        可変枠の右下隅

ちなみに、下記を追加すると詳細セクションのドラッグでフォームを移動できます。

Private Sub 詳細_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
通報 ...