zoukankan      html  css  js  c++  java
  • SWF文字查询及高亮显示——第三步:实现文字查询高亮显示及解决MovieClip帧切换时关键字无法高亮显示的问题

    SWF关键字高亮显示效果截图:

    上一篇中,已经介绍了基本思想,也转载了关键字的查询显示的关键代码。这些就不在重复啦!源码我会在最后放出的。我这要写得是我实现过程中遇到的问题和解决方法——解决MovieClip帧切换时关键字无法高亮显示的问题。

    问题描述/说明:

    1.加入文字检索和高亮显示功能后,查询关键字在第一页中可以正常高亮显示关键字,但是其他帧(页)没法显示关键字,切换到其他页再返回到第一页,第一页的关键字也没法显示,感觉是其他页面没有被检索和关键字高亮显示的状态没被保存下来。

    在左边页面控制栏中切换MovieClip的帧,也会出现上面的现象。

    2.如果是第一帧了,再点击PreviousPage,关键字显示效果消失。同样如果已经是最后一页了,再点击NextPage同样会出现关键字高亮显示效果丢失。

    问题原因分析:

    根据我跟进代码测试,发现关键字检索确实是对MovieClip的全部帧进行检索的,而且已经获取了所有的位置,只是帧切换后其他MovieClip帧中没能显示出关键字,只有在初次查询时能够在当前帧显示,再次查询时程序代码正常执行了,也获取到检索位置了,还是不能正常显示。经多次测试,发现问题出在TextSnapshot对象上。

    TextSnapshot对象必须定义在函数之外,定义成全局的。(此程序中解决页面切换时还需将其设为Public,以便其他类调用)

    TextSnapShot对象不能被定义多个,应该只存在一个。帧切换过程中TextSnapshot对象似乎被屏蔽了,没法正常显示。

    问题解决方法:

    针对问题1:在帧切换过程里,覆盖掉原来的TextSnapshot对象,即TextSnapshot对象=NULL;并重新进行查询,生成新的该TextSnapshot对象,操作该TextSnapshot对象。实现关键字高亮显示。在帧切换函数中加入:

    this.snapText=null;
    doSearch();  

    针对问题2:判断如果是第一帧了,隐藏PreviousPage;判断如果是最后一帧,隐藏NextPage。要隐藏掉相应的LinkButton,将LinkButton的enabled=false;好像不行的。

    在函数 nextPage()中添加:

      btnPrevious.visible=true;
         if(_currentPage==_pages-1)
         {
          btnNext.visible=false;
         }

    在函数previousPage()中添加:

      btnNext.visible=true;
         if(_currentPage==1)
         {
         btnPrevious.visible=false;
         }

    注:转成SWF的PDF文档必须是文本格式的,不能是影像,否则无法检索和高亮显示

    源代码下载:关键字高亮显示DEMO (只是很初级DEMO源码,其他很多问题可参照我之后的文章一步步改进) 

    下一步需要解决的问题内容:1.截取MovieClip的每帧为图片(仍然是个问题……) 2.解决MovieCip打印问题(注:已被解决,请看下帖)

  • 相关阅读:
    python——remove,del,pop三种删除元素方式的区别
    python——random.sample()的用法
    python的unittest框架中的assert断言
    python-unittest环境下单独运行一个用例的方法
    极简教程:数据结构与算法(一)
    总结:js世界中的特殊符号
    免费 https 申请步骤,你必须知道
    Uri编码,包括javascript前端与C#服务器端
    IIS中发布后出现Could not load file or assembly'System.Data.SQLite.dll' or one of its depedencies
    C# 程序关闭和进程关闭
  • 原文地址:https://www.cnblogs.com/wuhenke/p/1603845.html
Copyright © 2011-2022 走看看