現在 Delphi6 Personal を使用してメモ帳づくりをしています。そこで、findDailogのヘルプにあったコードを試したところ、オプションの”大文字と小文字を区別する。”と”単語単位で探す。”が設定できません。
下記のステップを追加すると大文字・小文字のオプションは有効になりましたが、単語単位は有効(選択状態)のままです。TSearchType型に値を設定するにはどうするのでしょうか?
何か解決方法がありましたら、よろしくお願いします。
*- - - - - - - - 以下、ヘルプ・サンプルコード - - - - - - - - - -*
procedure TForm1.FindDialog1Find(Sender: TObject);
var
FoundAt: LongInt;
StartPos, ToEnd: Integer;
w_Word,w_Match: TSearchType;
begin
- - - ここから
if frMatchCase in FindDialog1.Options then begin //大文字・小文字
w_Match := stMatchCase;
end;
if frWholeWord in FindDialog1.Options then begin //単語単位
w_Word := stWholeWord;
end;
- - - - ここまで
begin
with RichEdit1 do
begin
{ 検索は現在選択されている場所から開始される }
{ 何も選択されていない場合は,テキストの最初から開始される }
if SelLength <> 0 then
StartPos := SelStart + SelLength
else
StartPos := 0;
{ ToEnd は検索範囲の文字数を示す }
ToEnd := Length(Text) - StartPos;
FoundAt := FindText(FindDialog1.FindText, StartPos, ToEnd, [stMatchCase]); //サンプル
^ ^ ^ ^ ^ ^ ^ ^ ^
↓
FoundAt := FindText(FindDialog1.FindText, StartPos, ToEnd,[w_Match,w_Word ]); //修正
^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^
if FoundAt <> -1 then
begin
SetFocus;
SelStart := FoundAt;
SelLength := Length(FindDialog1.FindText);
end;
end;
end;
TFindDialog使ったことないので 的はずれだったらごめんなさい。
ヘルプには
TSearchType = (stWholeWord, stMatchCase);
TSearchTypes = set of TSearchType;
と定義されているようですが。
w_Word,w_Match: TSearchType;
は、定義して何か意味があるのですか?
FoundAt := FindText(FindDialog1.FindText, StartPos, ToEnd, [stMatchCase]); //サンプル
^ ^ ^ ^ ^ ^ ^ ^ ^
↓
FoundAt := FindText(FindDialog1.FindText, StartPos, ToEnd,[w_Match,w_Word ]); //修正
は ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^
FoundAt := FindText(FindDialog1.FindText, StartPos, ToEnd,[stWholeWord, stMatchCase ]);
としたいのでしょうか?
おもいっきり勘違いしていました(;^_^A アセアセ…
w_Word,w_Match: TSearchType;
を
TempSearchTypes : ComCtrls.TSearchTypes;
にかえて
TempSearchTypes := [];
if frMatchCase in FindDialog1.Options then begin //大文字・小文字
TempSearchTypes := TempSearchTypes + [stMatchCase];
end;
if frWholeWord in FindDialog1.Options then begin //単語単位
TempSearchTypes := TempSearchTypes + [stWholeWord];
end;
FoundAt := FindText(FindDialog1.FindText, StartPos, ToEnd,TempSearchTypes); //修正
でいいと思います
らくしょう☆さん、ありがとうございました。解決です。
質問の内容が不明確だったようですみませんでした。
最初、"stMatchCase"とゆうのはダイアログのチェックボックスの内容(チェックのON/OFF)が設定されていると思ったわけです。ところがこれは"ON"の状態を表していたのです。よって、"OFF"の値が必要となり"w_Match"を定義してみました。
よく考えてみれば集合型の変数なので、"[]"(空)にするとゆうのに気づくべきでした。
ツイート | ![]() |