● 文字列が選択されているか取得する ●

前のページを理解していれば簡単だよ。

今回は、前回の応用です。前回は SendMessage で返される戻り値を下位ワード・上位ワードに分けることで選択開始位置、選択終了位置を取得する、ということをやりました。もし、これらの値が等しい、即ち、選択開始位置 = 選択終了位置であればどうでしょう。もう、お分かりですね。これ以上は言及する必要はないでしょう。それでは関数を書いてみます。

'----------------------------------------------------------------
' 関数名 : IsSelText
' 機能 : 文字列が選択されているか調べる
' 引数 : (in) hEditbox … メモ帳のエディットボックスのハンドル
' 戻り値 : True…選択されている False…選択されていない
'----------------------------------------------------------------
Public Function IsSelText(ByVal hEditbox As Long) As Boolean

  Dim ret As Long
  Dim PrmLoWord As Integer '選択領域開始位置
  Dim PrmHiWord As Integer '選択領域最後尾位置

  ret = SendMessage(hEditbox, EM_GETSEL, 0&, ByVal 0&)

  PrmLoWord = GetLoWord(ret)
  PrmHiWord = GetHiWord(ret)

  IsSelText = Not CBool(PrmLoWord = PrmHiWord)

End Function

ちなみに、IsSelText = Not CBool(PrmLoWord = PrmHiWord) は、

If PrmLoWord = PrmHiWord Then
  IsSelText = False
Else
  IsSelText = True
End If

を1行でまとめたものです。「こんなもの誰でも知ってるぞ、馬鹿にするな」と思われる方もいると思いますが、念のために確認させていただきました。


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