TOPページへ戻る  PCページへ戻る  一覧へ戻る

SearchBuf関数の日本語文字列検索

SearchBuf関数は、はWindowsのメモ帳程度の速度でテキスト(バッファ)を 検索する関数です。一応日本語文字列(ANSI String)も検索できるようですが、 検索オプションの指定によっては検索できない文字があるようです。 たとえば、私の環境では「大文字/小文字を区別しない」状態では「度」という 文字を検索できませんでした。

ちょっと調べてみたところ、「大文字/小文字を区別する」状態だと 正しく検索してくれるようです。そこで、SearchBuf関数を使う前に一工夫すると 日本語文字列を正しく検索できるようになりました。


// たぶメモ内で使われている関数。引数に与えたMemoを検索し、文字列が見つかれば
// ハイライトしてTrueを、見つからなければFalseを返す関数 
  function TForm1.FindWord(Mtmp:TMemo; opt:TStringSearchOptions; St:String):Boolean;
  var P,PP : PChar;
  begin
  if ANSILowerCase(St) = ANSIUpperCase(St) then   // ANSI Stringが、ANSILowerCase() = ANSIUpperCase
      opt := opt + [soMatchCase];                 // になるのを利用し、ANSI Stringか否かを判別。
                                                  // ANSI Stringならば、引数のOptに[soMatchCase]を追加
  P := PChar(Mtmp.Text);
  PP := SearchBuf(P,StrBufSize(P),Mtmp.SelStart,Mtmp.SelLength,
                        St,opt);
  if PP <> nil then
          begin
          Mtmp.SetFocus;
          Mtmp.SelStart := PP-P;
          Mtmp.SelLength := Length(St);
          Result := True;
          end
  else  Result := False;
  end;

TOPページへ戻る  PCページへ戻る  一覧へ戻る