zoukankan      html  css  js  c++  java
  • 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所说的那个标记博客堂最新文章作者的智能标签。

  • 相关阅读:
    BaseServlet的编写
    两个线程交替打印1-100
    java集合中的HashMap源码分析
    mybatis一级缓存与二级缓存的原理
    mybatis的执行流程
    spring IOC的理解
    一文彻底搞懂面试中常问的各种“锁”
    Dubbo相关的基础
    Servlet基础
    文件传输基础
  • 原文地址:https://www.cnblogs.com/kaneboy/p/2436826.html
Copyright © 2011-2022 走看看