رمز لجعل عنصر تحكم DHTMLed يستبدل علامات الاقتباس المستقيمة بعلامات الاقتباس المتعرجة

StackOverflow https://stackoverflow.com/questions/61598

  •  09-06-2019
  •  | 
  •  

سؤال

لدي تطبيق VB6 قديم يستخدم عنصر تحكم تحرير DHTML كمحرر HTML.عنصر التحكم في تحرير Microsoft DHTML، المعروف أيضًا باسم.ربما لا يكون DHTMLed أكثر من مجرد عنصر تحكم IE يستخدم قدرة التحرير الأصلية الخاصة بـ IE داخليًا.

أرغب في تعديل التطبيق لتنفيذ علامات الاقتباس الذكية مثل Word.خاصة، " يتم استبداله ب أو و ' يتم استبداله ب أو بالشكل المناسب كما هو مكتوب؛وإذا ضغط المستخدم على Ctrl+Z مباشرة بعد الاستبدال، فإنه يعود إلى كونه اقتباسًا مستقيمًا.

هل لدى أي شخص رمز يفعل ذلك؟

إذا لم يكن لديك كود لـ DHTML/VB6، ولكن لديك كود JavaScript يعمل في متصفح به مناطق قابلة للتحرير، فيمكنني استخدام ذلك أيضًا

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

المحلول

إليك نسخة VB6:

Private Sub DHTMLEdit1_onkeypress()
    Dim e As Object
    Set e = DHTMLEdit1.DOM.parentWindow.event
    'Perform smart-quote replacement'
    Select Case e.keyCode
    Case 34: 'Double-Quote'
        e.keyCode = 0
        If IsAtWordEnd Then
            InsertDoubleUndo ChrW$(8221), ChrW$(34)
        Else
            InsertDoubleUndo ChrW$(8220), ChrW$(34)
        End If
    Case 39: 'Single-Quote'
        e.keyCode = 0
        If IsAtWordEnd Then
            InsertDoubleUndo ChrW$(8217), ChrW$(39)
        Else
            InsertDoubleUndo ChrW$(8216), ChrW$(39)
        End If
    End Select
End Sub

Private Function IsLetter(ByVal character As String) As Boolean
    IsLetter = UCase$(character) <> LCase$(character)
End Function

Private Sub InsertDoubleUndo(VisibleText As String, HiddenText As String)
    Dim selection As Object
    Set selection = DHTMLEdit1.DOM.selection.createRange()
    selection.Text = HiddenText
    selection.moveStart "character", -Len(HiddenText)
    selection.Text = VisibleText
End Sub

Private Function IsAtWordEnd() As Boolean

    Dim ch As String
    ch = PreviousChar
    IsAtWordEnd = (ch <> " ") And (ch <> "")

End Function

Private Function PreviousChar() As String

    Dim selection As Object
    Set selection = m_dom.selection.createRange()
    selection.moveStart "character", -1
    PreviousChar = selection.Text

End Function

ملحوظة:يقوم هذا الحل بإدراج مستوى إضافي في سلسلة التراجع.على سبيل المثال، كتابة "هذا اختبار" يعطي سلسلة من "هذا اختبار" -> "هذا اختبار" -> "هذا اختبار -> " -> " (مستوى إضافي بالخط العريض).لإزالة هذا المستوى الإضافي، سيتعين عليك تنفيذ نوع ما من PostMessage+subclassing الحل الذي لا يتضمن إلغاء الضغط على المفاتيح الأصلية

يحرر:لا تنس أن تدرج التحكم في تحرير DHTML القابل لإعادة التوزيع إذا كنت تستهدف نظام التشغيل Windows Vista.

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