使 DHTMLEd 控件用弯引号替换直引号的代码

2023-11-21

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

I'd like to modify the app to implement smart quotes like Word. Specifically, " is replaced with or and ' is replaced with or as appropriate as it is typed; and if the user presses Ctrl+Z immediately after the replacement, it goes back to being a straight quote.

有人有这样做的代码吗?

如果您没有 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

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

编辑:不要忘记包括DHTML 编辑控件可再发行如果您的目标是 Windows Vista。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使 DHTMLEd 控件用弯引号替换直引号的代码 的相关文章

随机推荐

  • Java StringTokenizer,空空标记

    我正在尝试将一个字符串拆分为 29 个标记 stringtokenizer 不会返回空标记 我尝试过 string split 但我相信我做错了什么 String strings line split 29 示例输入 10150 15 58
  • 如何将 MSpec 与 MS Build 集成?

    前几天我看了一个BDD 截屏视频 by 罗布 康纳利 在视频中他展示了如何使用MSpec 所以我下载了它并玩了一下 我现在想要的是整合MSpec使用 MS Build 但我不知道如何 我使用 TFS team build 作为我的 CI 服
  • 正则表达式撇号如何匹配?

    我想添加到此规则匹配撇号 rule re compile r lt gt 我努力了 rule re compile r lt gt 但它认为撇号是行错误 为什么 错误的出现是因为你不能直接使用单个 inside 以及同样单身的 不能在里面使
  • 具有需要存在另一个参数的可选参数

    很简单 我如何初始化params我的 Powershell 脚本的一部分 这样我就可以有一个命令行参数 例如 Get Foo foo1
  • Oracle:创建具有自动增量 id 列的视图

    我创建了一个view填充来自不同表的数据 我用了10 select statements并使用组合这些选择语句的结果UNION ALL 我想添加primary key column以我看来 因为我必须创造XML使用此中的数据的文件view
  • 如何在 C# 中对位图图像应用模糊效果? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 如何在不使用库的情况下在 C 中对图像应用模糊效果 更新的代码 现在更快 需要使用 UNSAFE 关键字 static void Main string args Bitmap
  • 使用单独数据帧中的值重命名列

    我有一个 tibble 其中的列名包含空格和特殊字符 这使得使用起来很麻烦 我想在处理数据时将这些列名称更改为更易于使用的名称 然后在最后将它们更改回原始名称以进行显示 理想情况下 我希望能够将其作为管道的一部分来完成 但是我还没有弄清楚如
  • 如何选择具有当天时间戳的行?

    我试图从数据库表中仅选择今天的记录 目前我使用 SELECT FROM table WHERE timestamp gt DATE SUB now INTERVAL 1 DAY 但这需要过去 24 小时的结果 我需要它只选择今天的结果 忽略
  • ViewPager 嵌套在 ViewPager 中

    我真的是 Android 新手 我将不胜感激对我的课程工作的任何帮助 我需要去做 1 一个Activity中两个ViewPager 不嵌套 2 两个ViewPager 一个ViewPager嵌套在另一个ViewPager中 我发现了类似的问
  • ASP.NET MVC 验证消息未本地化

    我正在使用 ASP NET MVC 4 和不显眼的客户端验证 我的应用程序中的语言是德语 在 web config 文件中定义 如果我有一个必填字段 在我的 Code First 类中配置了数据注释 则客户端验证工作正常 唯一的缺点 消息未
  • 无法将重复值插入到唯一索引中[关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 自答问题以供将来参考 如果您有一个已删除并重新添加内容的表 则在插入 ID 等于现有 I
  • 本机模式下 SQL Reporting Services 2008 启动缓慢

    在当天的第一个报告请求时 或者在未知的时间段内没有报告请求时 我们会遇到启动速度缓慢的情况 在 SQL Reporting Server 2005 安装中 我们将设置应用程序池以避免回收 Reporting Services 应用程序 但是
  • 根据缩放级别分组/取消分组 MKAnnotation(并保持快速)

    我有一个地图视图 其中有很多注释 其中大多数彼此非常接近 我想要做的类似于 iOS 上的照片应用程序 当注释彼此太接近时 它们会被分组 每当您缩小时 如果它们相距太远 它们就会取消分组 我见过这个问题已经 但给出的答案并不是我真正想要的 我
  • 在本地主机上使用“meteor mongo”但使用远程数据库

    我正在学习望远镜教程 我创建了一个 client collections myfile js 我在本地主机上 但我正在使用 MongoHQ 上托管的远程数据库启动 Meteor 而不是使用 Meteor 的本地数据库 在本教程中 我被告知通
  • 确保 Android WebView 安全的最佳实践检查列表

    我正在开发一个主要用 Native 编写并支持 Ice Cream Sandwich 的应用程序 但是 我需要添加一些 WebView 关于 WebView 安全性有很多讨论 当我使用 setJavaScriptEnabled true 时
  • 提供存储在 SQLAlchemy LargeBinary 列中的图像

    我想上传一个文件并将其存储在数据库中 我创建了一个 LargeBinary 列 logo db Column db LargeBinary 我读取上传的文件并将其存储在数据库中 files request files getlist fil
  • 使用模式进行部分字符串匹配

    我需要在 R 中编写一个查询来匹配列名称中的部分字符串 我正在寻找类似于 SQL 中的 LIKE 运算符的东西 例如 如果我知道字符串的开头 中间或结尾部分 我会按照以下格式编写查询 LIKE beginning middle 在 SQL
  • 模式匹配是多余的

    Haskell 堆栈构建工具 我有代码 quote Char quote doubleQuote Char doubleQuote isBorder Char gt Bool isBorder quote True isBorder dou
  • body 标签内的 document.ready

    我有一个包含通用 HTML 标头的 Web 应用程序 因此我想在每个页面中放置特定于页面的脚本 而不是加载所有内容 我尝试把document ready 接近尾声时一个页面 它似乎工作正常 将其放在那里而不是放在里面是否有任何潜在危险 雅虎
  • 使 DHTMLEd 控件用弯引号替换直引号的代码

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