タイトルバーのないフォームの移動             <TOP>


フォームの移動はタイトルバーをドラッグしますが、ない場合のフォームを移動させる場合便利です。

ReleaseCapture マウスのキャプチャを解放する

SendMessage ウィンドウにメッセージを送る

 

タイトルバーの有無にかかわらず機能しますが、例ではなしに設定しています。

フォーム内をドラッグして移動させます。コントロール上はドラッグできません。終了はフォームを ダブルクリックしてください。

 

'================================================================
'= タイトルバーのないフォームの移動
'=    (ReleaseCapture2.bas)
'================================================================
#include "Windows.bi"

' ウィンドウにメッセージを送信
Declare Function Api_SendMessage& Lib "user32" Alias "SendMessageA" (ByVal hWnd&, ByVal wMsg&, ByVal wParam&, lParam As Any)

' マウスのキャプチャを解放
Declare Function Api_ReleaseCapture& Lib "user32" Alias "ReleaseCapture" ()

#define WM_NCLBUTTONDOWN &HA1           '非クライアント領域で左マウスボタンを押す
#define HTCAPTION 2                     'タイトルバーをクリックしたことを示す
#define vbLeftButton 1                  '左ボタンクリック

'================================================================
'=
'================================================================
Declare Sub MainForm_MouseMove edecl (ByVal Button As Integer, ByVal Shift As Integer, ByVal SX As Single, ByVal SY As Single)
Sub MainForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal SX As Single, ByVal SY As Single)
    Var Ret As Long

    If Button = 1 Then
        Ret = Api_ReleaseCapture
        Ret = Api_SendMessage(GethWnd, WM_NCLBUTTONDOWN, HTCAPTION, 0)
    End If
End Sub

'================================================================
'=
'================================================================
Declare Sub MainForm_DblClick edecl (ByVal Button As Integer, ByVal Shift As Integer, ByVal SX As Single, ByVal SY As Single)
Sub MainForm_DblClick(ByVal Button As Integer, ByVal Shift As Integer, ByVal SX As Single, ByVal SY As Single)
    End
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End