掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
行の先頭から何文字目か(桁)を調べるには? (ID:76584)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
TextBoxにフォーカスがあり、そのBoxのキャレットのある位置を先頭位置からではなく、その行の先頭から何文字目か(桁)を調べるAPIまたは高速に動作するプログラムを探しています。 まあ、VBの上のほうに行と桁を表示するアレです。 私は下記のようなプログラムを組みました。(一部省略) '****************************** 'マウスカーソル位置の文字数(行の先頭から桁数)を取得 Dim Count As Long Dim strLin As String '総行数を取得する MaxRow = SendMessage(Text1.hwnd, EM_GETLINECOUNT, 0&, 0&) '現在行(マウスカーソル位置の)を取得する PosRow = SendMessage(Text1.hwnd, EM_LINEFROMCHAR, -1&, 0&) + 1 '現在行の先頭位置までのバイト数(vbFromUnicode)を取得 CurPos = SendMessage(Text1.hwnd, EM_LINEINDEX, -1&, 0&) '現在位置までのバイト数を取得 PosCol = SendMessage(Text1.hwnd, EM_GETSEL, 0&, 0&) \ 65536 '行の先頭からのバイト数を求める PosCol = PosCol - CurPos If PosCol < 0 Then PosCol = PosCol + 65535 End If '先頭からの文字列を求める strLin = Left$(Text1.Text, Text1.SelStart) 'IME入力時はこの処理ができない 'バイト数でカウントするならこの処理及びキー制限はいらない For Count = 0 To Len(strLin) '先頭位置と同じバイト数になるまで文字数をカウント If CurPos = LenB(StrConv(Left$(strLin, Len(strLin) - Count), vbFromUnicode)) Then PosCol = Count + 1 Exit For End If Next Count '****************************** そしてPosColを読めばOKですが、だめです。 これはとても遅く、またFOR文を抜かすと数千行目でバグって使えません。 変数はLong型を使っています。 どこからでも読み出したかったので、モジュールの中に定義しています。 SendMessage などAPIも同じです。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.