Código para fazer uma DHTMLEd controle substituir cotações com aspas curvas
Pergunta
Eu tenho um velho, legado VB6 aplicativo que usa o controle de edição DHTML como um editor de HTML.A Microsoft controle de edição DHTML, um.k.um.DHTMLEd, é, provavelmente, nada mais é do que um IE de controle usando o IE do próprio nativo capacidade de edição internamente.
Eu gostaria de modificar o aplicativo para implementar inglesas, como o Word.Especificamente, " é substituído com “ ou ” e ' é substituído com ‘ ou ’ conforme apropriado, como está escrito;e se o usuário pressiona Ctrl+Z imediatamente após a substituição, ele vai voltar a ser uma linha reta citação.
Alguém tem o código que faz isso?
Se você não tem o código para DHTML/VB6, mas não tem o JavaScript, o código que funciona em um navegador com contentEditable regiões que eu poderia usar que, muito
Solução
Aqui está a versão 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
Nota:esta solução insere um nível adicional no anular da cadeia.Por exemplo, digitar "Isto é um teste" dá uma cadeia de "Isto é um teste" -> "Isto é um teste" -> "Isto é um teste -> "-> " (nível extra em negrito).Para remover este nível extra que você teria para implementar algum tipo de PostMessage+subclassing
solução que não envolva anulação do nativo keypress
editar:Não se esqueça de incluir o Controle de Edição DHTML redistribuível se você está direcionando o Windows Vista.