テキストボックスの行数を表示するには

テキストボックスでクリックされた位置の文字位置を調べてみます。
キーワードは「EM_GETFIRSTVISIBLELINE」と「EM_GETLINECOUNT」メッセージです。
EM_GETLINECOUNTメッセージは現在テキストボックスに設定されているテキストの行数を調べます。
EM_GETFIRSTVISIBLELINEメッセージは現在テキストボックスのトップに表示されている行番号を調べます。
あとはこれを表示するだけです。

実行時の様子

Private Type POINTAPI
    x As Long
    y As Long
End Type
'カーソルの現在のスクリーン座標の取得
Private Declare Function GetCursorPos Lib "user32.dll" _
    (lpPoint As POINTAPI) As Long
'点座標をスクリーン座標からクライアント座標に変換する
Private Declare Function ScreenToClient Lib "user32.dll" _
        (ByVal hWnd As Long, lpPoint As POINTAPI) As Long
'指定のウィンドウにメッセージを送る
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" _
    (ByVal hWnd As Long, ByVal MSG As Long, _
    ByVal wParam As Long, ByVal lParam As Long) As Long
'テキストボックスのメッセージ
Private Const EM_GETFIRSTVISIBLELINE = &HCE     'トップに表示されている行番号を取得する
Private Const EM_GETLINECOUNT = &HBA            '複数行テキストボックスにおいて、
                                                'テキストの行数を取得する

Private Sub Form_Load() '行番号表示のフォントとテキストボックスのフォントを一緒にする Set Me.Label6.Font = Me.Text1.Font End Sub
Private Sub Text1_Change() Dim topLine, cntLine, txt 'トップの行番号を取得する topLine = SendMessage(Me.Text1.hWnd, EM_GETFIRSTVISIBLELINE, 0, 0) '全行数を取得する cntLine = SendMessage(Me.Text1.hWnd, EM_GETLINECOUNT, 0, 0) For a = topLine To cntLine txt = txt & a & vbCrLf Next '行数を表示 Me.Label6.Caption = txt End Sub
ダウンロード