● 文字列を置換する ●

検索をやったら置換もやらないとね。

置換は結構簡単です。SendMessage に EM_REPLACESEL メッセージを送信してあげればよいのです。この EM_REPLACESEL は選択されている文字列を、第4引数で指定した文字列に置換してくれます。要するに、前回作った文字列検索関数に、ちょっと付け足せばいいのです。

Private Const EM_REPLACESEL = &HC2  '選択されている文字列を指定の文字列で置換する

'---------------------------------------------------------------
' 関数名: ReplaceText
' 機能 : メモ帳の文字列を置換する
' 引数 : (in) hEditbox … メモ帳のエディットボックスのハンドル
'     (in) srcText … 検索文字列
'     (in) StartPos … 検索開始位置
'     (in) repText … 置換文字列
' 返り値 :次回検索開始位置、文字列が見つからなかった:0
'---------------------------------------------------------------
Public Function ReplaceText(ByVal hEditbox As Long, ByVal srcText As String, ByVal StartPos As Long, ByVal repText As String) As Long

  Dim gTextBuff As String
  Dim SearchPos As Long
  Dim SelStartPos As Long '選択開始位置
  Dim SelEndPos As Long  '選択終了位置
  Dim diffText As Long   '検索文字列と置換文字列の差

  'メモ帳の文字列を取得   gTextBuff = GetEditboxText(hEditbox)

  If StartPos < 1 Then StartPos = 1

  '文字列検索
  SearchPos = InStr(StartPos, gTextBuff, srcText)

  '文字列発見
  If SearchPos Then
    SelStartPos = GetStrLenB(Left$(gTextBuff, SearchPos - 1)) '選択開始位置を取得
    SelEndPos = SelStartPos + GetStrLenB(srcText)     '選択終了位置を取得

    Call SendMessage(hEditbox, EM_SETSEL, SelStartPos, ByVal SelEndPos)  '範囲選択
    Call SendMessage(hEditbox, EM_REPLACESEL, 0&, ByVal repText)      '文字列置換
    Call SendMessage(hEditbox, EM_SCROLLCARET, 0&, ByVal 0&)       'スクロール

    diffText = Len(repText) - Len(srcText)

    If diffText < 0 Then
      ReplaceText = SearchPos + Abs(diffText)
    Else
      ReplaceText = SearchPos + Len(repText)
    End If
  Else
    Beep
  End If

End Function


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