2012-03-18 72 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;