|
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;
|