2012-03-18 14 views
5

行追加後、RichEditを最後までスクロールする必要があります。私はこのRichEditを別の形で持っているので、私は全く焦点を当てたくありません。私はしばしば解決策を試しました:フォーカスのないRichEditのスクロール

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

しかし、これは私のためには機能しません。しかし、私がSendMessageRichEdit.SetFocus;と呼ぶ前にRichEditに焦点を当てると、うまく動作します。それは、しかし、アプリの私の他のニーズを台無しにする。

私はXE2を使用しています。ありがとう

答えて

11

は、これは私が何をすべきかです:キャレットがあるかもしれないところはどこでも、最後にジャンプする働き

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

FWIW、。しかし、キャレットの現在の位置でジャンプするには、HideSelectionトリックを実行する必要があります。 –

8

FrançoisGaillardによってこのブログ記事を参照してください:richedit-on-scrolling-strike。 Appearently

バグは、ここでは、回避策ソリューションです:

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; 
関連する問題