在没有焦点的情况下滚动RichEdit

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在没有焦点的情况下滚动RichEdit相关的知识,希望对你有一定的参考价值。

添加一行后,我需要将RichEdit滚动到最后。我有一个单独的RichEdit形式,我不想得到任何关注。我经常尝试建议解决方案:

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

但这对我不起作用。但是,当我在使用SendMessage调用RichEdit.SetFocus;之前关注RichEdit时,它的工作正常。然而,这破坏了我对应用程序的其他需求。

我正在使用XE2。谢谢

答案

这就是我做的:

SendMessage(RichEdit.Handle, WM_VSCROLL, SB_BOTTOM, 0);
另一答案

请参阅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;

以上是关于在没有焦点的情况下滚动RichEdit的主要内容,如果未能解决你的问题,请参考以下文章

VS2010下,RichEdit 2.0获得焦点后 ,自动全选并且自动滚到到最后一行,请问怎么解决?

如何在 RichEdit 中保存然后恢复垂直滚动位置

delphi 如何把RichEdit的滚动条移动到指定行?

RichEdit 控件在切换选项卡时不显示水平滚动条

如何防止 QTabWidget 滚动按钮获得焦点?

delphi richedit