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

Mar*_*lka 6 delphi richedit

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

  • FWIW,无论插入符号在哪里,都可以在最后跳转。但是要跳到插入符号的当前位置,您必须执行 HideSelection 技巧。 (2认同)

LU *_* RD 9

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