添加一行后,我需要将RichEdit滚动到最后。我有一个单独的RichEdit表格,我根本不想集中注意力。我尝试了经常建议的解决方案:
RichEdit.Lines.Add(someText);
RichEdit.SelStart:=RichEdit.GetTextLen;
SendMessage(RichEdit.handle, EM_SCROLLCARET, 0, 0);
但这对我来说不起作用。然而,当我在使用RichEdit.SetFocus;
调用SendMessage
之前关注RichEdit时,它会很好地工作。然而,这破坏了我对该应用程序的其他需求。
我正在使用XE2。感谢
这就是我所做的:
SendMessage(RichEdit.Handle, WM_VSCROLL, SB_BOTTOM, 0);
请参阅François Gaillard的博客文章:关于滚动罢工的richedit。
这似乎是一个错误,这里有一个变通的解决方案:
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;