Прокрутка RichEdit без фокусировки - PullRequest
6 голосов
/ 18 марта 2012

Мне нужно прокрутить RichEdit до самого конца после добавления строки. У меня есть этот RichEdit в отдельной форме, на который я вообще не хочу фокусироваться. Я пробовал часто предлагаемое решение:

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

Но это не работает для меня. Однако, когда я фокусирую RichEdit перед вызовом SendMessage с использованием RichEdit.SetFocus;, он работает просто отлично. Это, однако, разрушает мои другие потребности в приложении.

Я использую XE2. Спасибо

Ответы [ 2 ]

11 голосов
/ 18 марта 2012

Вот что я делаю:

SendMessage(RichEdit.Handle, WM_VSCROLL, SB_BOTTOM, 0);
9 голосов
/ 18 марта 2012

Смотрите это сообщение в блоге Франсуа Гайяра: 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;
...