● X行にあるキャレットの位置を取得する ●

既存の関数を組み合わせるだけ。

タイトルの意味がお分かりでしょうか。簡単に言うと、キャレットがある位置はその行の先頭の文字から数えて何バイト目にあるかを取得する、ということです。処理は簡単です。現在のキャレットがある位置からキャレットがある行の先頭文字の位置を引いてあげればいいのです。目新しい関数も今回はなく、既存の関数を組み合わせるだけでできてしまいます。それでは、関数を書いてみます。

'----------------------------------------------------------------
' 関数名 : GetCaretXPos
' 機能 : メモ帳のX行にあるキャレットのポジションを得る
' 引数 : (in) hEditbox … メモ帳のエディットボックスのハンドル
' 戻り値 : X行にあるキャレットの位置
'----------------------------------------------------------------
Public Function GetCaretXPos(ByVal hEditbox As Long) As Long

  Dim SelStartB As Long  '先頭からの文字位置
  Dim CurrentLine As Long 'キャレットがある行番号
  Dim LineStart As Long  '指定の行の先頭の文字位置

  '先頭からの文字位置を取得する
  SelStartB = GetLoWord(SendMessage(hEditbox, EM_GETSEL, 0&, ByVal 0&))

  '指定の文字位置の行番号を取得する
  CurrentLine = GetCaretLine(hEditbox)

  '指定の行の先頭の文字位置を取得する
  LineStart = GetTopPosOfLine(hEditbox, CurrentLine)

  GetCaretXPos = SelStartB - LineStart

End Function

この関数は、キャレットが文字の先頭にあれば1を返します。「文字列の先頭は0だ」と思う方は、1を引くなり適当に改造を試みてください。


[ インデックスページへ  |  前のページへ  |  次のページへ ]