2012-03-18 104 views
5

我需要在添加一行後滾動RichEdit到最後。我把這個RichEdit放在一個單獨的表格中,我不想集中注意力。我試着經常建議解決方案:滾動RichEdit沒有焦點

RichEdit.Lines.Add(someText); 
RichEdit.SelStart:=RichEdit.GetTextLen; 
SendMessage(RichEdit.handle, EM_SCROLLCARET, 0, 0); 

但是這對我不起作用。然而,當我在使用RichEdit.SetFocus;調用SendMessage之前專注RichEdit時,它工作得很好。然而,這破壞了我對應用程序的其他需求。

我正在使用XE2。謝謝

回答

11

這是我做的:

SendMessage(RichEdit.Handle, WM_VSCROLL, SB_BOTTOM, 0); 
+1

FWIW,即工作在年底前跳,只要插入符號可能。但是要跳到目前的位置,你必須執行HideSelection技巧。 – 2012-03-19 18:04:39

8

看到這篇博客文章弗朗索瓦蓋拉德:richedit-on-scrolling-strike

Appearently一個bug,這裏是解決辦法的解決方案:

procedure ScrollToEnd(ARichEdit: TRichEdit); 
var 
    isSelectionHidden: Boolean; 
begin 
    with ARichEdit do 
    begin 
    SelStart := Perform(EM_LINEINDEX, Lines.Count, 0);//Set caret at end 
    isSelectionHidden := HideSelection; 
    try 
     HideSelection := False; 
     Perform(EM_SCROLLCARET, 0, 0); // Scroll to caret 
    finally 
     HideSelection := isSelectionHidden; 
    end; 
    end; 
end;