● 総行数・キャレットがある行を取得する ●

もうちょっとだけがんばろう。

まず、エディットボックスの総行数を取得します。関数は以下の通り。

Private Const EM_GETLINECOUNT = &HBA '総行数を取得する

'----------------------------------------------------------------
' 関数名 : GetTotalLine
' 機能 : メモ帳の総行数を取得する
' 引数 : (in) hEditbox … メモ帳のエディットボックスのハンドル
' 戻り値 : メモ帳の総行数
'----------------------------------------------------------------
Public Function GetTotalLine(ByVal hEditbox As Long) As Long

  GetTotalLine = SendMessage(hEditbox, EM_GETLINECOUNT, 0, ByVal 0&)

End Function

次は、現在編集中の行、即ちキャレットがある行を取得します。これはどうするかというと、SendMessage に EM_LINEFROMCHAR を投げ、第3引数に先頭からの位置を指定すれば、行を返してくれます。1行目であれば0と返ってくるので1を足しあげる必要があります。さて、先頭からの位置ですがこれはキャレットの位置を設定してあげることにします。キャレットの位置の取得方法はこちらで説明済みです。

Private Const EM_LINEFROMCHAR = &HC9 '指定した文字位置の行を取得する

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

  Dim SelStartB As Long '先頭からの文字位置

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

  '指定文字位置の行番号を取得する
  GetCaretLine = SendMessage(hEditbox, EM_LINEFROMCHAR, SelStartB, ByVal 0&) + 1

 End Function


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