テキストボックスにマージンを設定するには

テキストボックスにマージンを設定してみます。
キーワードは「SendMessage()関数」です。
SendMessage()関数はウィンドウに対して、あるメッセージを送ります。
そのメッセージはウィンドウの種類ややりたいことによって変わってきますが、
今回はその中のテキストボックスに関するメッセージを送る事によって、マージンを設定します。

送るメッセージは「EM_SETMARGINS」です。
このメッセージはテキストボックスにマージンを設定してくれます。
wParamに左マージンを設定するのか、右マージンを設定するのかを指定します。
Or演算子で両方指定することもできます。

lParamに設定するマージンを設定します。
上位ワードに右マージンの幅(pixel)、下位ワードに←マージンの幅(pixel)を設定します。
その計算は
            Margin = RightMargin * 16 ^ 4 + LeftMargin
                                                       で行っています。

実行中の様子

'メッセージを送る
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" _
    (ByVal hWnd As Long, ByVal dwMessage As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
'テキストボックス関係のメッセージ(一部)
Private Const EM_SETMARGINS = &HD3                                  'マージンを設定する
    Private Const EC_LEFTMARGIN = &H1                               '   左マージンの設定
    Private Const EC_RIGHTMARGIN = &H2                              '   右マージンの設定

Private Sub Form_Load() Dim LeftMargin As Integer, RightMargin As Integer, Margin As Long 'テキストボックスのマージンを設定する LeftMargin = 20 RightMargin = 50 Margin = RightMargin * 16 ^ 4 + LeftMargin Call SendMessage(Me.Text1.hWnd, EM_SETMARGINS, EC_LEFTMARGIN Or EC_RIGHTMARGIN, Margin) Me.Text1.Text = "これはテキストボックスにマージンを設定するサンプルです。" & vbCrLf & vbCrLf & _ "どうですか?右と左に余白ができてますか?これがマージンです。" End Sub
ダウンロード