2009-04-19 4 views
2

正規表現検索をサポートするDelphiのRich Editコントロールを操作した経験がある人には、大変感謝しています。RegEx検索をサポートするRich Edit Delphiコントロール

MSのITextSelection.FindText implementationが、正規表現のいくつかのMSミッキーマウスバリアント(つまり、段落に^ p)を使用していることを知るためにのみ、RichEdit.dll V3ベースのコントロールを使いこなしました。

TRichEdit1.textに対する正規表現検索では、非表示のRTF書式設定のためにSelStartの場所が一致しません。

誰かが回避策を提案できない限り、これはRichEdit.dllベースのコントロール/コンポーネントを除外していると思いますか?

私はまたDream Rich Editorを見ましたが、これは(2005年現在で)これが長く維持されていることを心配しています。それ以外の場合は理想的ですが、ReGex構文がサポートされているかどうかを問い合わせるための連絡先情報が見つかりません。(PCRE?)

もう1つのオプションはProfHTMLEditでしたが、テストした2MBのHTMLファイルに挑戦しました。大規模なファイルに対しても編集は非応答的でした。コントロールが有望だったので、恥ずべき。

さらに別のコンポーネントはTRichViewでしたが、悲しいことに、正規表現を使用した検索をサポートしていないようです。

簡単に言えば、私の要件は、簡単な編集(太字、斜体、選択の並び)を可能にするDelphi 7のコントロールであり、最も重要なのは、正規表現(PCRE ..基礎となるストレージメカニズム(rtf、html、xyz)が何であるかにも悩まされることはありません。

ヘルプやヒント/ヒント/ヒントは大変ありがたいです。

+0

「正規表現検索をサポートする」とはどういう意味ですか?なぜ、どのようにコントロールがそれをサポートすべきですか? リッチエディットや他のコントロールからテキストを取り出し、正規表現ライブラリを使って検索することができます。検索ダイアログを表示するには、TFindDialogを使用するか、自分で書き込んでください。一致する部分文字列を示すには、コントロールで選択範囲を設定します。 –

答えて

2

This linkが参考になる場合があります。私は、そこに記載されたコンポーネントの経験から話すことはできませんが、何年ものHelpScribbleユーザーとして、Jan Goyvaertの製品に対するサポートは一貫して優れていると言えるでしょう。あなたは彼に連絡することを試みるかもしれません - 彼は有用なコンポーネントを知っているかもしれません。リッチエディットコントロールから文字列変数(書式設定なし)にテキストをコピーすると、それを検索してその位置をコントロール内のテキストに戻すことができるかもしれません。ちょっとした考え。

+0

答えに感謝します。 "それを検索してその位置をあなたのコントロールのテキストに戻すことができるかもしれません。 プレーンテキストで正規表現検索を実行しようとしましたが、プレーンテキストトークンのマッチ位置は、RichEdit.SelStartを使用しているときにマップされません。悲しいことに、人生ははるかに単純です:) – Nazar

+2

残念ながら、 Jan Goyvaertsは、正規表現機能を組み込んだ豊富な編集Delphiコンポーネントについては知らない。プレーンテキストをTPerlRegExにコピーし、返されたオフセットと長さを使用してリッチエディットコントロールに選択や置換を指示します。 –

1

私はTRichViewを使用していますが、正規表現を使用した検索はサポートしていませんが、完全なソースコードで取得できます。

私自身のソフトウェアのためにパッケージにさまざまなカスタマイズを加え、正規表現をサポートするために検索機能の内部を変更することは、私の評価ではそれほど難しくありません。

これは、ソースコードを所持しているRichEditコントロールに該当する可能性があります。

次に、自分で追加する方法については、"...use Regular Expressions in Delphi?"をご覧ください。


正規表現を実装したTRichViewのユーザーが見つかりました。 He describes a bit of how he did it、彼が使用したパッケージはTRegExでした。私はTRegExには慣れていませんが、おそらく彼はto this oneを参照しているか、TRegExprを試してみることができます。

あなたはabout.comでDelphiのためのRegExライブラリの良いリストを見つけることができます。

+0

コメントlkesslerに感謝します。 TRichViewの開発者は、これらの行に沿って電子メールを送信します。私は彼らのサポートフォーラムで検索しましたが、正規表現のサポートに関する多くのトラフィックは見られませんでした。 乾杯。 – Nazar

+0

以前はTRegExprを使っていましたが、TPerlRegExほど良くはありませんでした。フォーラムのリンクありがとう!私は開発者と電子メールをドロップし、あなたが送信したフォーラムリンクをチェックアウトします。素晴らしい* 2! – Nazar

+0

私は以前はTRegExprを使っていましたが、TPerlRegExほど良くはありませんでしたが、同じロジックを使い、別のコンポーネントを簡単に置き換えることができるはずです。 – Nazar

2

それは奇妙だが、デルファイのための正規表現のコンポーネントのほとんどのリストには、私はほとんどすべての時間のを使用して1言及していない:「マイクロソフトのVBScriptの正規表現5.5」タイプライブラリをインポートすることにより得

VBScript_RegExp_55_TLB.pas 

を。これはVBScriptラベルがVBScript/Javascript 5.5と共にInternet Explorer 5.5と一緒に導入されたため、ユーザーにIE5.5以上を必要とする場合はエンドユーザークライアントにライブラリがあることを保証します。私はリッチエディットコントロールと組み合わせていません。

1

私はTRichEditとRichEd20.dllについて、この質問への優れたフィードバックに基づいてさらに調査しました。

いくつかの背景。 TPerlRegExを使ってTRichEditコントロールの内容を検索し、一致する結果を強調表示したい。 RichEdit1.Lines.Textを検索対象として使用していたこれまでの試みでは、RegEx MatchedExpressionOffsetとRichEdit1.SelStartが一致しませんでした。

これはRTFフォーマットによるものだと思っていましたが、それは私の頭のおならがありました!綿密に検討する上で

、RichEdit.FindTextを使用しない際に考慮される必要がある2つの問題があります。RichEdit.TextまたはRichEdit.Lines.Textを使用している場合

  1. が、これらは余分な含まれていることに注意してください#$ Dと#$キャリッジリターンと改行文字。
  2. TPerlRegex.MatchedExpressionOffsetを使用している場合、これはTRichEdit.SelStartがゼロに基づいている間のベースです。

TPerlRegexを使用してSelStartを正しく見つけるには、SelStartを決定するときに改行と改行を考慮する必要があります。

+0

Delphi 2009以降を使用する場合は、TPerlRegExがUTF8Stringで動作し、オフセットがUTF-8バイト長であることも考慮する必要があります。その理由は、基礎となるPCREライブラリがUTF-8を使用しているからです。 –

関連する問題