Código para realizar una DHTMLEd control de reemplazar comillas rectas con comillas tipográficas

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

  •  09-06-2019
  •  | 
  •  

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

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top