Smarter Tag

简介:
上一篇Blog向大家介绍了智能标签。如前所说,开发智能标签程序并非很“舒适”,尤其是在部署上,因为我们必须将COM组件注册到计算机上,然后将其ClsID加到位于注册表的智能标签列表处。而如果使用SmarterTag(注意这个名词和SmartTag的区别),这个托管包装器来开发智能标签程序,那就爽多了。

首先,在 这里下载SmarterTag,除了SmarterTag之外,还有一个QuickStart可以下载,QuickStart是一个项目源码,演示了如何开发一个SmarterTag项目。

将下载的SmarterTag中的文件解压到磁盘上的某处,比如“C:\SmarterTag”,然后运行reg.bat文件,将SmarterTag注册到计算机上。然后我们要做的,就是打开VS.NET 2003,创建一个普通的类库项目,并且在项目中引用Microsoft.PRC.Office.SmarterTag.dll程序集。

下面演示的,是开发一个能够寻找到正文中的“kane”,然后显示一个标签,上面的菜单操作可以将正文中的“kane”修改为“kaneboy”的智能标签(这个示范也包含在QuickStart里面)。效果图如下:
 



一个SmarterTag必须实现ISmarterTag接口:

public class FindKaneboy : ISmarterTag

ISmarterTag接口要求我们的类实现如下的方法和属性:

public void Init(String applicationName)
{
    // 初始化代码
}


Init()可以让我们的SmarterTag在载入时,进行一些初始化工作。比如从后台载入客户名单等等。

public Boolean IsMatch(String text)
{
    return text.ToLower().Trim() == "kane";
}


IsMatch()用来判断参数中的文本是否符合智能标签要标记的文本。在这里,只要文本是“kane”就行了。

public String[] ActionTypeNames
{
    get
   {
    return new String[] {"SmarterTag.QuickStart.ReplaceKane, SmarterTag.QuickStart"};
   }
}


ActionTypeNames属性的作用是,决定在智能标签的菜单上,要出现哪些菜单项。每个菜单项都是一个实现了IAction接口的类。这里需要返回一个字符串数组,数组里面的每个元素,是一个菜单项对应的类的类型全名。这个返回的字符串数组的数量,也就决定了智能标签上会显示多少个操作菜单项。

接着我们就要构建一个实现了IAction接口的类了,IAction表示智能标签上的一个菜单项:

public class ReplaceKane : IAction

IAction只有一个属性和一个方法需要实现:

public String Caption
{
   get
   {
        return "补充为“kaneboy”";
   }
}

Caption属性返回要显示在菜单项上的文本。

public void InvokeAction(Object target, String applicationName, String text)
{
   Range rng = target as Range;
   Object start = rng.Start;
   Object end = rng.End;
   Range rng2 = rng.Document.Range(ref start, ref end);
   Object unit = WdUnits.wdCharacter;
   Object count = 3;
   rng2.MoveEnd(ref unit, ref count);
   if (rng2.Text != "kaneboy")
   {
        rng.Text = "kaneboy";
   }
}


OK,InvokeAction()方法稍微复杂一点,因为这个方法就是当用户点击智能标签上的这个菜单项时,要执行的代码。target参数表示在宿主程序(host application)中智能标签所标记的那块文本区域所对应的对象。宿主程序的不同,这个对象类型也不尽相同,对于Word而言,target是一个Range类型的对象。第二个参数applicationName标识了宿主程序的名称。第三个参数text是智能标签所标记的文本内容。

在上面InvokeAction()方法中,代码将智能标签所标记的文本内容从“kane”修改为了“kaneboy”。

由于我们编写的是完全的.Net程序,所以InvokeAction()是可以做任何.Net代码可以做的事情的(在权限允许的情况下)。比如显示一个MessageBox,或者显示一个WinForms窗口,或者调用WebService......这里就是业务逻辑代码的主要落脚点。

QuickStart中另外包含的SmarterTag识别了“kaneboy”,和上一篇Blog所说的那个标记博客堂最新文章作者的智能标签。





本文转自 kaneb0y 51CTO博客,原文链接:http://blog.51cto.com/kaneboy/281334,如需转载请自行联系原作者
目录
相关文章
|
5月前
(145) Table ‘./addon_collect_wukong_spider‘ is marked as crashed and should be repaired解决思路
(145) Table ‘./addon_collect_wukong_spider‘ is marked as crashed and should be repaired解决思路
25 0
|
6月前
杭电2095(find your present (2))
杭电2095(find your present (2))
34 0
|
计算机视觉 Python
ERROR: Could not find a version that satisfies the requirement PIL (from versions: none)
ERROR: Could not find a version that satisfies the requirement PIL (from versions: none)
|
自然语言处理
Reading the Manual: Event Extraction as Definition Comprehension, EMNLP 2020
Reading the Manual: Event Extraction as Definition Comprehension, EMNLP 2020
89 0
Reading the Manual: Event Extraction as Definition Comprehension, EMNLP 2020
|
机器学习/深度学习 算法
Re9:读论文 DEAL Inductive Link Prediction for Nodes Having Only Attribute Information
Re9:读论文 DEAL Inductive Link Prediction for Nodes Having Only Attribute Information
Re9:读论文 DEAL Inductive Link Prediction for Nodes Having Only Attribute Information
|
机器学习/深度学习 Java
HDOJ 2095 find your present (2)
HDOJ 2095 find your present (2)
110 0
HDOJ 2095 find your present (2)
PAT (Advanced Level) Practice - 1143 Lowest Common Ancestor(30 分)
PAT (Advanced Level) Practice - 1143 Lowest Common Ancestor(30 分)
119 0
PAT (Advanced Level) Practice - 1043 Is It a Binary Search Tree(25 分)
PAT (Advanced Level) Practice - 1043 Is It a Binary Search Tree(25 分)
124 0
PAT (Advanced Level) Practice - 1004 Counting Leaves(30 分)
PAT (Advanced Level) Practice - 1004 Counting Leaves(30 分)
109 0
PAT (Advanced Level) Practice - 1013 Battle Over Cities(25 分)
PAT (Advanced Level) Practice - 1013 Battle Over Cities(25 分)
119 0