TRichEdit コンポーネントを使用して、Delphi (2009) でエディターを作成しています。コンポーネントの他の場所からマウスを使用してコピーする機能を維持しながら、キャレットが常に最後にある必要があるという意味で、エディターは追加専用です。
現時点では、何かを書くたびにキャレットを最後に移動する方法ですが、テキストの他の部分をクリックしたときにキャレットがマウスに追従しないようにすることはできますか?
いいえ、できません。ユーザーが何かを入力するときは、カレットを最後に移動する必要があります。
いいえ。ユーザーがマウスまたはキーボードで選択するには、キャレットを移動する必要があります。新しいテキストを挿入するたびに、キャレットを最後に移動する必要があります。おそらく、各挿入中にユーザーの現在のキャレット位置を保持および復元する必要があります。たとえば、次のようになります。
procedure TForm.AppendText(const S: String);
var
OldCharRange, NewCharRange: TCharRange;
begin
SendMessage(RichEdit1.Handle, EM_EXGETSEL, 0, LParam(@OldCharRange));
try
NewCharRange.cpMin := RichEdit1.GetTextLen;
NewCharRange.cpMax := NewCharRange.cpMin;
SendMessage(RichEdit1.Handle, EM_EXSETSEL, 0, LParam(@NewCharRange));
RichEdit1.SelText := S;
finally
SendMessage(RichEdit1.Handle, EM_EXSETSEL, 0, LParam(@OldCharRange));
end;
end;