誰かが私にメモの簡単な文字列を検索して見つけた後でメモに強調表示させる簡単なコードを教えてもらえますか?Delphiのメモを検索しますか?
答えて
function TForm1.FindText(const aPatternToFind: String):Boolean;
var
p: Integer;
begin
p := pos(aPatternToFind, Memo1.Text);
Result := (p > 0);
if Result then
begin
Memo1.SelStart := p;
Memo1.SelLength := Length(aPatternToFind);
Memo1.SetFocus; // necessary so highlight is visible
end;
end;
WordWrapがtrueの場合、これは行を検索しません。
この検索では、ドキュメントの折り返し、大文字と小文字の区別による検索、カーソル位置からの検索が可能です。
type
TSearchOption = (soIgnoreCase, soFromStart, soWrap);
TSearchOptions = set of TSearchOption;
function SearchText(
Control: TCustomEdit;
Search: string;
SearchOptions: TSearchOptions): Boolean;
var
Text: string;
Index: Integer;
begin
if soIgnoreCase in SearchOptions then
begin
Search := UpperCase(Search);
Text := UpperCase(Control.Text);
end
else
Text := Control.Text;
Index := 0;
if not (soFromStart in SearchOptions) then
Index := PosEx(Search, Text,
Control.SelStart + Control.SelLength + 1);
if (Index = 0) and
((soFromStart in SearchOptions) or
(soWrap in SearchOptions)) then
Index := PosEx(Search, Text, 1);
Result := Index > 0;
if Result then
begin
Control.SelStart := Index - 1;
Control.SelLength := Length(Search);
end;
end;
メモがフォーカスされていない場合でも、メモにHideSelection = Falseを設定して選択を表示することができます。このような
用途:
SearchText(Memo1, Edit1.Text, []);
も同様に編集内容を検索することができます。
UpperCaseを使用すると、目的の結果が得られない場合があります。フランス語では大文字にアクセントを付けることはできませんが、小文字には大文字を使用することができます(大文字のアクセント記号付きのカナダのフランス語とは異なります)。この場合、LowerCaseを使用するとより良い結果が得られます。 – dummzeuch
アクセント付きの文字とアクセントのない文字は、2つの異なる文字ですね。フランス語の単語は、UpperCaseに変換するとPRIVéのように表示され、小文字ではprivéになります。一方、大文字のÉはéに変換されないので、検索結果にどのように影響するかわかりません。私がDelphi 7でこれをテストしていることは認めなければなりませんが、LowerCaseを使用しているときにユニコードまたはDelphiでロケール設定を使用するとより良い結果が得られることを確認してください。 – GolezTrol
GolezTrol:HideSelectionのヒントをありがとう! – RobertFrank
- 1. メモ帳++範囲検索
- 2. Delphi BPLの検索パス
- 3. メモ帳++正規表現の検索
- 4. delphiのサブメニュー項目の親を検索
- 5. メモ帳++検索ウィンドウが消えました
- 6. URLで空白を検索し、メモ帳で置換する++
- 7. 編集とメモのDelphiのテキストオフセット
- 8. Delphi - 大きなTMemoでテキストを検索
- 9. FirebirdとDelphiでのフルテキスト検索
- 10. Delphi 2009のバグ? - > * .resがプロジェクト検索パスに見つかりません(Delphi 2006で動作します)
- 11. Delphi 10.1でメモ付きフォームをオートサイズ
- 12. 数字の文字列をメモ帳で検索する++
- 13. メモ帳でURLをトラッキングするための検索と置換++
- 14. Delphi検索パスとライブラリパスと参照パス
- 15. Delphi:検索ダイアログと文字列グリッド
- 16. メモ帳でカスタム検索ボタンを作成する++
- 17. メモ帳++ RegEx:検索テキストをコピーし、値を追加して置換する
- 18. Delphiのすべてのサブディレクトリでファイルを検索するには
- 19. メモ帳の検索と置換++、テキストの色
- 20. Facebook API - ページ/ブランド(2016)の検索を検索しますか?
- 21. メモ帳メモ帳++ <em></em>機能を検索と置換を使用して文字列/文字
- 22. メモ帳++数値をインクリメント値で検索/置換
- 23. メモ帳++ ++検索と正規表現の置換
- 24. メモ帳++私のケースで特定のテキストまたは数字を検索して選択します
- 25. 文字列を検索し、その前にパターンを置き換える - メモ帳++
- 26. メモ帳++ Regexを使用して見つかったテキストの一部のみを検索して置換する
- 27. 検索バーと検索ディスプレイコントローラをマップビューに追加しますか?
- 28. バイナリ検索ツリーで親を検索しますか?
- 29. DelphiのTDBGridで現在の行を検索
- 30. RegEx検索をサポートするRich Edit Delphiコントロール
'TStrings.Text'ではなく' TStrings.Strings'で検索するのは非常に高価です。実際には2×Nである。 –
@ user205376 - なぜそれを言うのですか? TStrings.Textはpos()が高速になると思う単一の文字列です。 TStrings.Stringsには、それぞれの文字列にアクセスするための添字が含まれています。つまり、IMOの意見は、遅くなり、pos()が持たない追加の機能を提供しません。 (そして、発見されたパターンを強調するためにいくつかのトリッキーなコードが必要になるでしょう)なぜあなたはそうではないと思いますか? – RobertFrank
ゲームに少し遅れますが、上記の場合、それは実装に依存します。結局のところ、TStringは抽象的です。 Memo.Lines.Text(= TMemoStrings.Text)は、単一のAPI呼び出しを使用してメモのテキストを取得しますが、TStringListは別々の文字列を格納し、TStringList.Textは各要求で単一の文字列にそれらを結合しますAPI、btw)。答えはMemo1.Textを使用しています。これはTStringsの子孫をバイパスし、メモのハンドル上のGetText APIを直接呼び出します。 – GolezTrol