2012-03-18 20 views
5

Muszę przewinąć RichEdit do samego końca po dodaniu linii. Mam ten RichEdit w osobnej formie, że nie chcę w ogóle skupiać się na nim. Próbowałem często sugerowane rozwiązanie:Przewijanie RichEdita bez konieczności ustawiania ostrości

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

Ale to nie działa dla mnie. Jednak gdy skupię się na RichEdit przed wywołaniem SendMessage przy użyciu , to działa dobrze. To jednak niszczy moje inne potrzeby związane z aplikacją.

Używam XE2. Dzięki

Odpowiedz

11

To co mam zrobić:

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

FWIW, który działa, aby przeskoczyć na koniec, gdzie daszek może być. Jednak aby przeskoczyć do aktualnej pozycji karetki, musisz wykonać sztuczkę HideSelection. –

8

Zobacz ten wpis blogu autorstwa François Gaillard: richedit-on-scrolling-strike.

Appearently błąd, oto rozwiązanie obejście:

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; 
Powiązane problemy