【问题标题】:Code to make a DHTMLEd control replace straight quotes with curly quotes使 DHTMLEd 控件用弯引号替换直引号的代码
【发布时间】:2023-03-28 12:35:02
【问题描述】:

我有一个旧的、遗留的 VB6 应用程序,它使用 DHTML 编辑控件作为 HTML 编辑器。 Microsoft DHTML 编辑控件,又名 DHTMLEd,可能只不过是一个在内部使用 IE 自己的本机编辑功能的 IE 控件。

我想修改应用程序以实现像 Word 这样的智能引号。具体来说," 被替换为 并且 ' 被替换为 '' 以适当的方式键入;如果用户在替换后立即按下 Ctrl+Z,它会恢复为直引用。

有人有这样的代码吗?

如果您没有 DHTML/VB6 的代码,但有在具有 contentEditable 区域的浏览器中工作的 JavaScript 代码,我也可以使用它

【问题讨论】:

    标签: html dom vb6


    【解决方案1】:

    这是 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
    

    注意:此解决方案在撤消链中插入了一个附加级别。例如,输入“This is a test”会给出“This is a test”->“This is a test”-> “This is a test -> “->”的链(额外水平粗体)。要删除这个额外的级别,您必须实现某种不涉及取消本机按键的PostMessage+subclassing 解决方案

    编辑:如果您的目标是 Windows Vista,请不要忘记包含 DHTML Editing Control redistributable

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-13
      • 2012-01-13
      • 2013-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多