سؤال

ولدي نموذج مع richtextbox والتمرير. أريد أن أكون قادرة على الحفاظ على إلحاق النص إلى النص دون أن تفقد اختياري. أنا يمكن أن ينقذ selectionstart وselectionlength قبل أن إلحاق النص وتحديد إعادته ويعمل. المشكلة هي عندما يتعلق الأمر عكس اختيار. يتم تعيين أفضل ما يمكن القيام به يعود selectionstart في الموضع الصحيح، ولكن لا بد لي من تحريك الماوس لذلك يختار النص مرة أخرى. أنا باستخدام الوظائف التالية قبل وبعد أن إلحاق النص:

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. أي شخص يعرف كيفية اختيار صحيح النص في الاتجاه المعاكس OR بسهولة تحديد مشكلتي حول النص الذي إلغاء تحديد؟ شكرا.

هل كانت مفيدة؟

المحلول

وأود أن محاولة جعل "لبنات اختيار" الحفاظ على كل لوح الملحقة مستقلة نص كتلة التالي. نوع من مثل MSN رسول. يمكنك جعل "لوحات" تظهر سلس، ويمكن أن تستخدم ب StringBuilder تصدير كتلة النهائي بأمان كما تيار واحد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top