添加一行后,我需要将RichEdit滚动到最后.我有一个单独的RichEdit形式,我不想得到任何关注.我经常尝试建议解决方案:
RichEdit.Lines.Add(someText);
RichEdit.SelStart:=RichEdit.GetTextLen;
SendMessage(RichEdit.handle, EM_SCROLLCARET, 0, 0);
Run Code Online (Sandbox Code Playgroud)
但这对我不起作用.但是,当我在调用SendMessage
使用之前关注RichEdit时,RichEdit.SetFocus;
它可以正常工作.然而,这破坏了我对应用程序的其他需求.
我正在使用XE2.谢谢
Dav*_*nan 11
这就是我做的:
SendMessage(RichEdit.Handle, WM_VSCROLL, SB_BOTTOM, 0);
Run Code Online (Sandbox Code Playgroud)
请参阅FrançoisGaillard 撰写的这篇博文:richedit-on-scrolling-strike.
显然是一个错误,这是解决方法:
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;
Run Code Online (Sandbox Code Playgroud)