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