【问题标题】:Scrolling RichEdit without it having focus在没有焦点的情况下滚动 RichEdit
【发布时间】:2012-04-03 04:03:11
【问题描述】:

添加一行后,我需要将 RichEdit 滚动到最后。我以单独的形式拥有这个 RichEdit,我根本不想获得焦点。我尝试了经常建议的解决方案:

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

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

我正在使用 XE2。谢谢

【问题讨论】:

    标签: delphi richedit


    【解决方案1】:

    这就是我的工作:

    SendMessage(RichEdit.Handle, WM_VSCROLL, SB_BOTTOM, 0);
    

    【讨论】:

    • FWIW,无论插入符号在哪里,都可以在末尾跳转。但是,要在插入符号的当前位置跳转,您必须使用 HideSelection 技巧。
    【解决方案2】:

    请参阅 François Gaillard 的这篇博文: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;
    

    【讨论】:

      猜你喜欢
      • 2020-10-19
      • 1970-01-01
      • 2012-04-28
      • 1970-01-01
      • 2013-12-11
      • 2010-10-28
      • 2022-11-22
      • 1970-01-01
      相关资源
      最近更新 更多