VBレスキュー(花ちゃん)
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ各掲示板

リンク元へ戻ります。 リッチテキストボックス関係のメニュー
1.リッチテキストボックスに関する基本的な操作例
2.リッチテキストボックス← →Word 間でテキストのやり取り
3.リッチテキストボックスの総行数・現在行・現在桁の取得
4.2つのリッチテキストボックスのスクロールの同期をとる
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.その他、当サイト内に掲載のリッチテキストボックスに関するサンプル


3.リッチテキストボックスの総行数・現在行・現在桁の取得
1.リッチテキストボックスの総行数・現在行・現在桁の取得
2.
3.
4.
5.
6.


 下記プログラムコードに関する補足・注意事項 
動作確認:Windows Vista・Windows 7 (32bit) / VB6.0(SP6) Excel 2010
Option :[Option Explicit]
参照設定:
使用 API:SendMessage

その他 :プロジェクト→コンポーネント→コントロールで Microsoft Rich Textbox Control 6.0 にチェックを入れ、
    :表示されたコントロールをフォームに貼り付けて下さい。
このページのトップへ移動します。 1.リッチテキストボックスの総行数・現在行・現在桁の取得   
5.テキストボックスの総行数・現在行・現在桁の取得と同様のコードで取得できます。

Option Explicit

'指定のウィンドウにメッセージを送る(P750)
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
'複数行テキストボックスにおいてテキストの行数を取得する(P799)
Private Const EM_GETLINECOUNT = &HBA
'  〃    指定行の先頭の文字インデックスを取得する(P803)
Private Const EM_LINEINDEX = &HBB
'  〃    指定の文字インデックスを含む行インデックスを取得(P802)
Private Const EM_LINEFROMCHAR = &HC9
'選択されたテキストの最初と最後の文字インデックスを取得する(P801)
Private Const EM_GETSEL = &HB0

Private Function fGetCursorPosition(ByRef txtBox As RichTextBox) As Long()
'テキストボックス用と同じ設定です。
  Dim bytArray() As Byte
  Dim myPos(2)  As Long
  Dim n     As Long
  myPos(0) = SendMessage(txtBox.hwnd, EM_GETLINECOUNT, 0&, 0&)    '総行数を取得する
  myPos(1) = SendMessage(txtBox.hwnd, EM_LINEFROMCHAR, -1&, 0&) + 1  '現在行(カーソル位置の)を取得する
  myPos(2) = SendMessage(txtBox.hwnd, EM_LINEINDEX, -1, 0)  '現在行の先頭位置までのバイト数(Unicode)を取得
  If myPos(2) = 0 Then
    myPos(2) = txtBox.SelStart + 1     '現在桁を求める
  Else
    ReDim bytArray(0 To myPos(2))      '行の先頭までの文字数を求める
    n = Len(StrConv(LeftB$(StrConv(txtBox.Text, vbFromUnicode), myPos(2)), vbUnicode))
    myPos(2) = (txtBox.SelStart + 1) - n  '現在桁を求める
  End If
  fGetCursorPosition = myPos
End Function

Private Sub RichTextBox1_KeyUp(KeyCode As Integer, Shift As Integer)
'カーソル位置の文字数(行の先頭から桁数)を取得
  Dim myPos As Variant
  myPos = fGetCursorPosition(RichTextBox1)
  Label1.Caption = " 総行数 : " & myPos(0) & "   現在行 : " & myPos(1) & "   現在桁 : " & myPos(2)
End Sub

Private Sub RichTextBox1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
'マウスカーソル位置の文字数(行の先頭から桁数)を取得
  Dim myPos As Variant
  myPos = fGetCursorPosition(RichTextBox1)
  Label1.Caption = " 総行数 : " & myPos(0) & "   現在行 : " & myPos(1) & "   現在桁 : " & myPos(2)
End Sub

このページのトップへ移動します。 2.


このページのトップへ移動します。 3.


このページのトップへ移動します。 4.


このページのトップへ移動します。 5.


このページのトップへ移動します。 6.


このページのトップへ移動します。 検索キーワード及びサンプルコードの別名(機能名)





このページのトップへ移動します。