テキストボックスの表示できる領域を制限するには

テキストボックスの表示できる領域を制限してみます。
キーワードは「EM_SETRECT」メッセージです。
EM_SETRECTメッセージはテキストボックスにフォーマット領域を設定します。
フォーマット領域とはテキストを表示できる有効な領域です。
テキストはこのフォーマット領域内に表示されます。
通常はこのフォーマット領域はテキストボックスのサイズと同じですが
EM_SETRECTメッセージを使ってその範囲を変更しています。
テキストがフォーマット領域内に入りきらなくなれば、ちゃんとスクロールバーが働きます。

実行時の様子
で囲まれた部分が設定したフォーマット領域

Private Type RECT
    x As Long
    y As Long
    dx As Long
    dy As Long
End Type
'グラフィックスオブジェクトを削除し、システムリソースを解放する
Private Declare Function DeleteObject Lib "gdi32.dll" _
        (ByVal hObject As Long) As Long
'純色(ソリッドカラー)で論理ブラシを作成する
Private Declare Function CreateSolidBrush Lib "gdi32.dll" _
    (ByVal crColor As Long) As Long
'デバイスコンテキストのハンドルを取得する
Private Declare Function GetDC Lib "user32.dll" _
    (ByVal hWnd As Long) As Long
'矩形の周囲に指定のブラシで境界線を書く
Private Declare Function FrameRect Lib "user32.dll" _
        (ByVal hDC As Long, lprc As RECT, ByVal hbr As Long) As Long
'指定のウィンドウにメッセージを送る
Private Declare Function SendMessageAny Lib "user32.dll" Alias "SendMessageA" _
    (ByVal hWnd As Long, ByVal MSG As Long, wParam As Any, lParam As Any) As Long
'テキストボックスのメッセージ
Private Const EM_SETRECT = &HB3             'テキストボックスのフォーマット領域の矩形を設定する

Dim lpRect As RECT                          '表示する領域

Private Sub Form_Load() Dim dx, dy dx = Me.Text1.Width / 5 dy = Me.Text1.Height / 5 With lpRect .x = dx .y = dy .dx = Me.Text1.Width - dx .dy = Me.Text1.Height - dy End With Call SendMessageAny(Me.Text1.hWnd, EM_SETRECT, ByVal 0, lpRect) End Sub
Private Sub Text1_Change() Dim hbr As Long hbr = CreateSolidBrush(vbRed) Call FrameRect(GetDC(Me.Text1.hWnd), lpRect, hbr) Call DeleteObject(hbr) End Sub
ダウンロード