我正在使用TRichEdit組件編寫Delphi(2009)中的編輯器。編輯器只能追加,因爲插入符必須始終處於末尾,同時保持使用組件中其他位置的鼠標進行復制的能力。將插入符號保存在文本末尾的豐富編輯
它現在的工作方式是每當寫入內容時將插入符號移動到末尾,但是在單擊文本的其他部分時是否可以使插入符號不跟隨鼠標?
我正在使用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;
C++中的工作太多? OldStart有什麼問題:= RichEdit1.SelStart; OldLen:= RichEdit1.SelLength;嘗試RichEdit1.SelStart:= NewStart; RichEdit1.SelText:= S;最後RichEdit1.SelStart:= OldStart; RichEdit1.SelLength:= OldLen;結束; –
2010-09-10 12:54:53
使用'EM_EXGETSEL'和'EM_EXSETSEL'直接消除了發送給RichEdit的幾條消息(SelStart和SelLength屬性獲取器和設置器分別重新發布這些消息),並且SelLength屬性設置器也發出額外的EM_SCROLLCARET消息。 – 2010-09-10 20:35:51