Código para realizar una DHTMLEd control de reemplazar comillas rectas con comillas tipográficas
Pregunta
Tengo un viejo legado de VB6 aplicación que utiliza el control de edición de DHTML como un editor de HTML.Microsoft control de edición de DHTML, una.k.una.DHTMLEd, es, probablemente, nada más que una IE de control usando IE del propio capacidad de edición internamente.
Me gustaría modificar la aplicación a implementar tipográficas, como Word.Específicamente, " se sustituye con “ o ” y ' se sustituye con ‘ o ’ tan apropiada como se escribe;y si el usuario presiona Ctrl+Z inmediatamente después de la sustitución, se va a volver a ser una recta de presupuesto.
¿Alguien tiene un código que hace eso?
Si usted no tiene el código para DHTML/VB6, pero no tienen el código JavaScript que funciona en un navegador con contentEditable regiones, podría utilizar, demasiado
Solución
Aquí está el VB6 versión:
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
Nota:esta solución se inserta un nivel adicional en el deshacer de la cadena.Por ejemplo, si escribe "Esto es una prueba" da una cadena de "Esto es una prueba" -> "Esto es una prueba" -> "Esto es una prueba -> "-> " (mayor nivel en negrita).Para eliminar este nivel extra tendría que implementar algún tipo de PostMessage+subclassing
solución que no implique la cancelación de los nativos de pulsación de teclas
editar:No olvides incluir el Control de Edición de DHTML redistribuible si usted está apuntando a Windows Vista.