2010-09-09 31 views
1

我正在使用TRichEdit組件編寫Delphi(2009)中的編輯器。編輯器只能追加,因爲插入符必須始終處於末尾,同時保持使用組件中其他位置的鼠標進行復制的能力。將插入符號保存在文本末尾的豐富編輯

它現在的工作方式是每當寫入內容時將插入符號移動到末尾,但是在單擊文本的其他部分時是否可以使插入符號不跟隨鼠標?

回答

3

不,這是不可能的。當用戶鍵入內容時,必須將插入符號移動到最後。

1

否。插入符號必須移動以便用戶使用鼠標或鍵盤進行選擇。每次插入新文本時,都必須將插入符號移動到最後。您應該在每次插入時保留並恢復用戶的當前插入位置,例如:

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; 
+1

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

+1

使用'EM_EXGETSEL'和'EM_EXSETSEL'直接消除了發送給RichEdit的幾條消息(SelStart和SelLength屬性獲取器和設置器分別重新發布這些消息),並且SelLength屬性設置器也發出額外的EM_SCROLLCARET消息。 – 2010-09-10 20:35:51

相關問題