Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms word ms word对象模型:自定义拼写检查下划线_Ms Word_Vsto_Spell Checking - Fatal编程技术网

Ms word ms word对象模型:自定义拼写检查下划线

Ms word ms word对象模型:自定义拼写检查下划线,ms-word,vsto,spell-checking,Ms Word,Vsto,Spell Checking,在制作MS Word插件拼写检查器时,我面临着“下划线”的问题。我可以使用Word对象模型的格式化功能来给拼写错误的单词上色,或者按照用户使用U按钮时的方式给它们加下划线,但这与原生ms Word卷曲下划线不同,它在复制粘贴文本时不会显示,不会打印或保存,也不会在撤消操作中显示。我一直在寻找如何做到这一点,但每个人都说这是不可能的 有一个叫做Grammarly的英语拼写检查器,它们确实有一个ms word插件,它们以某种方式在拼写错误的单词下面划线(虽然不是卷曲的,只是一条粗直线),它的工作原理

在制作MS Word插件拼写检查器时,我面临着“下划线”的问题。我可以使用Word对象模型的格式化功能来给拼写错误的单词上色,或者按照用户使用U按钮时的方式给它们加下划线,但这与原生ms Word卷曲下划线不同,它在复制粘贴文本时不会显示,不会打印或保存,也不会在撤消操作中显示。我一直在寻找如何做到这一点,但每个人都说这是不可能的

有一个叫做Grammarly的英语拼写检查器,它们确实有一个ms word插件,它们以某种方式在拼写错误的单词下面划线(虽然不是卷曲的,只是一条粗直线),它的工作原理与ms word一样:

a) 当您将带有下划线的文本移动到其他位置时,不会粘贴副本,保存文档时也不会保存副本

b) 它不会添加到撤消堆栈中

因此,从a)和b)我得出结论,这不是文本格式

所以一定有办法,我想知道如何才能做到这一点


提前感谢您提供的任何想法或提示。

我认为语法学为想要标记的单词和短语添加强调的方式是以非常智能和可控的方式临时更改文档。仅当单击Grammary功能区上的
打开Grammary
按钮时,Grammary才起作用。如果你做一个简单的实验,你也许能够观察到语法是如何控制它的临时变化的

首先创建一个未保存的文档,其中包含一些拼写错误的单词,这些单词会触发Microsoft Word显示红色波浪线。然后单击
打开语法
按钮。请注意,外接程序关闭拼写检查,并用自己的web触发标记替换Word的波浪形红线。这些可能是在文档中使用类似以下代码生成的:

myRange.Font.Underline = Microsoft.Office.Interop.Word.WdUnderline.wdUnderlineThick;
myRange.Font.UnderlineColor = Microsoft.Office.Interop.Word.WdColor.wdColorRed;
观察此情况后,保存文档。如果你仔细看你的屏幕(如果你的电脑不是超高速的),你会看到一个小的闪烁,其中红色粗下划线消失了一小会儿。这就是
文档。在保存前删除语法标记后再保存
事件。通过依赖用户操作(例如,当用户单击Grammarly ribbon按钮时),Grammarly控制标记出现的时间点。然后,它使用代码和事件确保标记不会与文档一起保存或干扰其他操作。要为自己的拼写检查器加载项复制此行为,您希望查看的主要事件包括:


我认为,语法学强调要标记的单词和短语的方式是,以一种非常智能和可控的方式临时更改文档。仅当单击Grammary功能区上的
打开Grammary
按钮时,Grammary才起作用。如果你做一个简单的实验,你也许能够观察到语法是如何控制它的临时变化的

首先创建一个未保存的文档,其中包含一些拼写错误的单词,这些单词会触发Microsoft Word显示红色波浪线。然后单击
打开语法
按钮。请注意,外接程序关闭拼写检查,并用自己的web触发标记替换Word的波浪形红线。这些可能是在文档中使用类似以下代码生成的:

myRange.Font.Underline = Microsoft.Office.Interop.Word.WdUnderline.wdUnderlineThick;
myRange.Font.UnderlineColor = Microsoft.Office.Interop.Word.WdColor.wdColorRed;
观察此情况后,保存文档。如果你仔细看你的屏幕(如果你的电脑不是超高速的),你会看到一个小的闪烁,其中红色粗下划线消失了一小会儿。这就是
文档。在保存前删除语法标记后再保存
事件。通过依赖用户操作(例如,当用户单击Grammarly ribbon按钮时),Grammarly控制标记出现的时间点。然后,它使用代码和事件确保标记不会与文档一起保存或干扰其他操作。要为自己的拼写检查器加载项复制此行为,您希望查看的主要事件包括:


不幸的是,MS Word没有提供现成的功能来实现这一点。Grammarly和其他具有类似功能的插件的工作方式是,它们使用Windows API在MS Word窗口的顶部显示透明窗口。然后,它们识别需要高亮显示的单词的坐标,并在这些单词的顶部的透明窗口内绘制高亮显示(矩形或下划线)。这不是一个简单的解决方案,因为它需要识别屏幕上当前显示的可见范围,找到该范围内需要突出显示的单词,并跟踪用户的操作,如滚动和调整窗口大小,以便在这些操作后重新绘制突出显示。但可以肯定的是,这是可能的,因为我们最近已经在我正在开发的产品中实现了这一点。据我所知,没有现成的开源解决方案,因此您需要自己实现所有功能


你也可以考虑一个更容易的解决方案,即使用<代码>查找。HitHighlight < /代码>功能。当您在MS word中搜索一个简单的单词时,您可以看到它是如何工作的示例。尽管这不是一个非常灵活的解决方案,因为您唯一可以更改的是突出显示的颜色。

不幸的是,MS Word没有提供开箱即用的功能来实现这一点。Grammarly和其他具有类似功能的插件的工作方式是,它们使用Windows API在MS Word窗口的顶部显示透明窗口。然后,它们识别需要高亮显示的单词的坐标,并在这些单词的顶部的透明窗口内绘制高亮显示(矩形或下划线)。这不是一个简单的解决方案,因为它需要识别屏幕上当前显示的可见范围,找到该范围内的单词