パスワードを忘れた? アカウント作成
106552 journal

A7Mの日記: 与太話:正規表現チェッカーでの結果表示部分の実装

日記 by A7M

C++Builderでboost::regexでマッチした部分を色分けして表示することを考えてみたら、意外と難しそう。('A`)
以下の候補について調べてみたけど、どれも制限がある。

TRichEdit → 文字列のフォントが途中で化ける(特に、FontLinkした奴)EM_GETLANGOPTIONSでデュアルフォントモードを無効にすればOK!!
TMemo → オーナードローが出来ない(多分)
TWebBrowser → 結果をHTMLに変換して表示ってのはちょっと・・・
TUniSynEdit → C++Builder2009にうまくインストールできない
TJv*Editor → 日本語が化けまくって使い物にならない
TEditor → 1行あたり1000文字の制限
表示部分そのものを全部自分で実装 → ('A`)マンドクセ

さぁ、どうする?>俺
TListBoxにオーナードローするのが一番無難かな・・・。 あるいは、複数行はサポートせずに、結果を1行単位で、かつ、縦方向に表示するとか。

やりたいことは正規表現のチェックと正規表現をC/C++の文字列リテラルに変換したいだけで、ここまで凝る必要があるのかどうかってことだけど。
チェッカーそのものだけだったら、他の実装やWEBサービスで我慢するってのもありかもしれないけど、「正規表現をC/C++の文字列リテラルにしたい」(要するに、"\d+\t\d+"を"\\d+\\t\\d+"のようするのが面倒)ってのが出発点だから、やっぱり、自分でやるしかないかも。

20:30 追記:
RichEditのフォントの件は、デュアルフォントモードを無効にすれば回避できる

// デュアルフォントモードを無効にする
DWORD dwLangOptions = SendMessage(RichEdit1->Handle, EM_GETLANGOPTIONS, 0, 0);
dwLangOptions &= ~IMF_DUALFONT;
SendMessage(RichEdit1->Handle, EM_SETLANGOPTIONS, 0, (LPARAM)dwLangOptions);

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

目玉の数さえ十分あれば、どんなバグも深刻ではない -- Eric Raymond

読み込み中...