DHTMLEd 컨트롤을 만드는 코드는 곧은 따옴표를 둥근 따옴표로 바꿉니다.

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

  •  09-06-2019
  •  | 
  •  

문제

DHTML 편집 컨트롤을 HTML 편집기로 사용하는 오래된 레거시 VB6 응용 프로그램이 있습니다.Microsoft DHTML 편집 컨트롤(일명)DHTMLEd는 내부적으로 IE 자체의 기본 편집 기능을 사용하는 IE 컨트롤에 지나지 않습니다.

Word와 같은 스마트 따옴표를 구현하도록 앱을 수정하고 싶습니다.구체적으로, " 로 대체됩니다 또는 그리고 ' 로 대체됩니다 또는 입력된 대로 적절하게;교체 직후 사용자가 Ctrl+Z를 누르면 곧은 따옴표로 돌아갑니다.

누구든지 그렇게 하는 코드를 가지고 있나요?

DHTML/VB6용 코드는 없지만 contentEditable 영역이 있는 브라우저에서 작동하는 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

메모:이 솔루션은 실행 취소 체인에 추가 수준을 삽입합니다.예를 들어, "This is a test"를 입력하면 "This is a test" -> "This is a test" -> 체인이 제공됩니다. “이건 테스트야. -> “ -> "(굵은 글씨는 추가 레벨).이 추가 레벨을 제거하려면 일종의 구현을 수행해야 합니다. PostMessage+subclassing 기본 키 누르기를 취소하지 않는 솔루션

편집하다:다음을 포함하는 것을 잊지 마세요. DHTML 편집 컨트롤 재배포 가능 Windows Vista를 대상으로 하는 경우.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top