Delphi2006からDelphiXE2に移行するときに、私たちが学んだことの1つは、RichEdit2.0が内部的CRLF
にペアを単一のCR
文字に置き換えることです。これには、VCL側の実際のテキスト文字列に基づくすべての文字インデックス計算を破棄するという不幸な影響があります。
VCLコードをトレースして確認できる動作は次のとおりです。
WM_GETTEXT
メッセージを送信すると(で実行)、ペアTControl.GetTextBuf
を含むテキストバッファが返されます。CRLF
WM_GETTEXTLENGTH
メッセージを送信すると(で実行TControl.GetTextLen
)、テキストにまだ文字が含まれているかのように値が返されますCRLF
。- 対照的に、
EM_SETSELEX
メッセージを送信する(つまり設定するSelStart
)と、入力値はテキストに文字のみCR
が含まれているように扱われます。
これにより、アプリケーションであらゆる種類のもの(構文の強調表示など)が失敗します。お分かりのように、その時点までの改行ごとに、すべてが1文字だけずれています。
明らかに、これは一貫性のない動作であるため、何かを見逃しているか、非常に間違ったことをしているに違いありません。
RichEdit1.0からRichEdit2.0コントロールへの移行の経験がある人はいますか?また、この問題をどのように解決しましたか?最後に、RichEdit2.0にRichEdit1.0とCRLF
同じようにペアを使用させる方法はありますか?