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



添加一行后,我需要将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;

相关内容

  • 没有找到相关文章

最新更新