0

リッチテキストボックスとスクロールバーを備えたフォームがあります。選択範囲を失うことなく、テキスト ボックスにテキストを追加し続けられるようにしたいと考えています。テキストを追加して元に戻す前に、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

私の主な目標は、新しいテキストがリッチテキスト ボックスに追加されている場合でも、テキストを選択してコピーできるようにすることです。テキストを逆に正しく選択する方法、またはテキストの選択が解除されるという問題を簡単に修正する方法を知っている人はいますか? ありがとう。

4

1 に答える 1

1

「選択可能なブロック」を作成して、追加されたテキストの各スラブを次のブロックに依存しないようにします。MSN メッセンジャーのようなものです。「パネル」をシームレスに見せることができ、stringbuilder を使用して最終ブロックを単一のストリームとして安全にエクスポートできます。

于 2009-08-11T10:50:05.640 に答える