2012-03-18 12 views
5

Necesito desplazar un RichEdit hasta el final después de agregar una línea. Tengo este RichEdit en una forma separada, que no quiero enfocarme en absoluto. Intenté a menudo la solución sugerida:Desplazamiento RichEdit sin tener foco

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

Pero esto no funciona para mí. Sin embargo, cuando enfoco RichEdit antes de llamar al SendMessage usando RichEdit.SetFocus;, funciona bien. Eso, sin embargo, arruina mis otras necesidades para la aplicación.

Estoy usando XE2. Gracias

Respuesta

11

Esto es lo que hago:

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

Fwiw, que trabaja para saltar al final, siempre que el cursor sea. Sin embargo, para saltar a la posición actual del cursor, debe hacer el truco HideSelection. –

8

Ver esta entrada del blog de François Gaillard: richedit-on-scrolling-strike.

Appearently un error, aquí está la solución Solución:

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; 
Cuestiones relacionadas