15

Delphi2006からDelphiXE2に移行するときに、私たちが学んだことの1つは、RichEdit2.0が内部的CRLFにペアを単一のCR文字に置き換えることです。これには、VCL側の実際のテキスト文字列に基づくすべての文字インデックス計算を破棄するという不幸な影響があります。

VCLコードをトレースして確認できる動作は次のとおりです。

  1. WM_GETTEXTメッセージを送信すると(で実行)、ペアTControl.GetTextBufを含むテキストバッファが返されます。CRLF
  2. WM_GETTEXTLENGTHメッセージを送信すると(で実行TControl.GetTextLen)、テキストにまだ文字が含まれているかのように値が返されますCRLF
  3. 対照的に、EM_SETSELEXメッセージを送信する(つまり設定するSelStart)と、入力値はテキストに文字のみ CRが含まれているように扱われます。

これにより、アプリケーションであらゆる種類のもの(構文の強調表示など)が失敗します。お分かりのように、その時点までの改行ごとに、すべてが1文字だけずれています。

明らかに、これは一貫性のない動作であるため、何かを見逃しているか、非常に間違ったことをしているに違いありません。

RichEdit1.0からRichEdit2.0コントロールへの移行の経験がある人はいますか?また、この問題をどのように解決しましたか?最後に、RichEdit2.0にRichEdit1.0とCRLF同じようにペアを使用させる方法はありますか?

4

2 に答える 2

1

EM_LINEFROMCHARキャレットの位置から引くのはどうですか?(または の位置EM_GETSEL) 必要な方。

EM_LINEFROMCHAR2 つの変数を取得することもできます。1 つは選択の開始点から、もう 1 つは目的のキャレット/選択位置からのものです。

于 2016-03-04T18:08:24.160 に答える