リッチテキストボックスとスクロールバーを備えたフォームがあります。選択範囲を失うことなく、テキスト ボックスにテキストを追加し続けられるようにしたいと考えています。テキストを追加して元に戻す前に、selectionstart と selectionlength を保存できます。問題は、逆選択になるときです。私ができる最善のことは、選択開始を正しい位置に戻すことですが、マウスを動かしてテキストを再度選択する必要があります。テキストを追加する前後に、次の関数を使用しています。
Private Sub StopRepaint()
Dim pt As Point
' Stop redrawing:
SendMessage(txtchat.Handle, WM_SETREDRAW, 0, pt)
' Stop sending of events:
eventmask = SendMessage(txtchat.Handle, EM_GETEVENTMASK, 0, pt)
End Sub
Private Sub StartRepaint()
Dim pt As Point
' turn on events
SendMessage(txtchat.Handle, EM_SETEVENTMASK, 0, pt)
' turn on redrawing
SendMessage(txtchat.Handle, WM_SETREDRAW, 1, pt)
' this forces a repaint, which for sotxtchat reason is necessary in sotxtchat cases.
txtchat.Invalidate()
End Sub
スクロールバーの位置が完全に下にない場合は、テキストが追加された後にこれを使用して元に戻します:
If Not isbottom(getpos) Then
PostMessageA(txtchat.Handle, WM_VSCROLL, SB_THUMBPOSITION + _
&H10000 * getpos(), Nothing)
End If
私の主な目標は、新しいテキストがリッチテキスト ボックスに追加されている場合でも、テキストを選択してコピーできるようにすることです。テキストを逆に正しく選択する方法、またはテキストの選択が解除されるという問題を簡単に修正する方法を知っている人はいますか? ありがとう。