رمز لجعل عنصر تحكم DHTMLed يستبدل علامات الاقتباس المستقيمة بعلامات الاقتباس المتعرجة
سؤال
لدي تطبيق 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.