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