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打印问题(注:已被解决,请看下帖)

原文地址:https://www.cnblogs.com/wuhenke/p/1603845.html