我需要在添加一行后将RichEdit滚动到最末尾。我有一个单独形式的RichEdit,我根本不想获得焦点。我经常尝试建议的解决方案:
RichEdit.Lines.Add(someText);
RichEdit.SelStart:=RichEdit.GetTextLen;
SendMessage(RichEdit.handle, EM_SCROLLCARET, 0, 0);但这对我不起作用。但是,当我在使用RichEdit.SetFocus;调用SendMessage之前聚焦RichEdit时,它工作得很好。然而,这破坏了我对这个应用程序的其他需求。
我使用的是XE2。谢谢
发布于 2012-03-18 17:39:27
这就是我要做的:
SendMessage(RichEdit.Handle, WM_VSCROLL, SB_BOTTOM, 0);发布于 2012-03-18 17:37:36
请参阅弗朗索瓦·盖拉德的这篇博客文章:richedit-on-scrolling-strike。
这看起来是个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;https://stackoverflow.com/questions/9757134
复制相似问题