テキストボックスでのカーソル位置を取得する
テキストボックスでのカーソル位置を取得するサンプルです。
サンプルの実行画面
ソースコード
[TextBox.frm]
'SendMessage=>メッセージをウインドウに送る '<引数> 'hWnd:ウインドウのハンドル 'wMsg:定数(EM_××参照) 'wParam:パラメータ 'lParam:0 '<戻り値> Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Long) As Long Const EM_LINEFROMCHAR = &HC9 'カーソルがある行数(縦)を取得 Const EM_GETLINECOUNT = &HBA 'テキストボックスでの最大行数(縦)を取得する Const EM_LINEINDEX = &HBB 'カーソルがある行(横)の位置を取得する Const EM_LINELENGTH = &HC1 'カーソルがある行(横)の最大行数を取得する Const EM_GETSEL = &HB0 ' Private Sub Form_Load() Text1.Text = "テキストボックスにカーソルを移してください。" & vbCrLf & _ "現在の座標が表示されていますか?" & vbCrLf & _ vbCrLf & _ "テキストボックスにカーソルを移してください。" & vbCrLf & _ "現在の座標が表示されていますか?" & vbCrLf & _ vbCrLf & _ "テキストボックスにカーソルを移してください。" & vbCrLf & _ "現在の座標が表示されていますか?" & vbCrLf & _ vbCrLf & _ "テキストボックスにカーソルを移してください。" & vbCrLf & _ "現在の座標が表示されていますか?" & vbCrLf & _ vbCrLf & _ "テキストボックスにカーソルを移してください。" & vbCrLf & _ "現在の座標が表示されていますか?" End Sub Private Sub Timer1_Timer() Dim Line As Long 'カーソルがある行数(縦) Dim MaxLine As Long '現在の最大行数(縦) Dim Top As Long 'カーソルがある行の先頭の位置(横) Dim Width As Long 'カーソルがある行の最大行数(横) Dim Midle As Long ' Dim Ret As Long '現在カーソルがある位置(横) '現在カーソルがある行数(縦)を取得する Line = SendMessage(Text1.hwnd, EM_LINEFROMCHAR, -1, 0) + 1 '最大行数(縦)を取得する MaxLine = SendMessage(Text1.hwnd, EM_GETLINECOUNT, 0, 0) Label1.Caption = "行数(縦)" & Line & "/" & MaxLine 'カーソルがある行(横)の位置を取得する Top = SendMessage(Text1.hwnd, EM_LINEINDEX, -1, 0) 'カーソルがある行(横)の最大行数を取得する Width = (SendMessage(Text1.hwnd, EM_LINELENGTH, Top, 0)) / 2 + 1 'カーソルの位置を取得する Midle = SendMessage(Text1.hwnd, EM_GETSEL, 0, 0) Ret = (Midle \ 65536 - Top) / 2 + 1 Label2.Caption = "位置(横)" & Ret & "/" & Width End Sub '※テキストボックスに半角を使用すると正確でなくなります。
ソースコード一式のダウンロード
vbapi_textbox.zip 5.94 KB (6,086 バイト)
このサンプルの動作環境について
このサンプルは 「Windows98」及び「Microsoft Visual Basic 5.0 Professional Edition」で確認しております。環境が異なる場合は正常に動作しない場合もございますのでご了承下さい。
スポンサーリンク
関連記事
前の記事: | リストボックスの各種操作2 |
次の記事: | テキストボックスの各種操作1 |
公開日:2015年03月05日
記事NO:00404