У меня есть форма с richtextbox и полосой прокрутки. Я хочу иметь возможность добавлять текст в текстовое поле, не теряя выбора. Я могу сохранить 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
Моя главная цель - иметь возможность выделять и копировать текст, даже когда новый текст добавляется в richtextbox. Кто-нибудь знает, как правильно выбрать текст в обратном порядке ИЛИ легко решить мою проблему с отменой выделения текста? Спасибо.