FindTextでオプションを設定するには?

解決


東海岸  2004-12-14 08:05:33  No: 12277

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


らくしょう☆  2004-12-14 09:10:32  No: 12278

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 ]);  
としたいのでしょうか?


らくしょう☆  2004-12-14 09:28:05  No: 12279

おもいっきり勘違いしていました(;^_^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);  //修正

でいいと思います


東海岸  2004-12-15 09:55:30  No: 12280

らくしょう☆さん、ありがとうございました。解決です。
質問の内容が不明確だったようですみませんでした。
最初、"stMatchCase"とゆうのはダイアログのチェックボックスの内容(チェックのON/OFF)が設定されていると思ったわけです。ところがこれは"ON"の状態を表していたのです。よって、"OFF"の値が必要となり"w_Match"を定義してみました。
よく考えてみれば集合型の変数なので、"[]"(空)にするとゆうのに気づくべきでした。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加