返回首页

 
authorware中实现长文本输入四法

  笔者在使用authorware制作多媒体作品的过程中遇到如下问题:authorware 提供的text entry文本输入交互类型,只能在预先定义的输入框内输入有限长度的文本。经过实践,笔者总结出四种方法可以实现长文本的输入:activex控件法、外部编辑法、外部函数法和分页输入法。   

    一、activex控件法   authorware从4.0版开始支持activex控件,使authorware共享windows及其它应用程序的资源成为可能,大大提高了用authorware进行高级程序设计的效率。微软提供的文本编辑控件常见的有两个:textbox控件 (随windows 95/98自动安装在系统中)和richtext控件(可以在visual basic 5.0/6.0中文版找到,即richtx32.ocx文件)。经测试,textbox控件在authorware中不能正常显示中文文字,但可以接收。笔者使用vb5中文版的richtext控件取得了满意的效果,方法如下:   通过选单命令insert/control…在authorware的流程线上插入richtext控件的一个实例(当然你的系统中应安装注册了该控件,并安装了vb),并适当设置其属性值,主要有:multiline为true,scrollbars为3 - rtfboth等,然后通过一个交互结构来实现对控件输入框的内容进行读取并保存在自定义变量textstr中,见图1。 在计算图标“确定”中置入:   textstr:=getspriteproperty(@"richtext control",#text)   ——用于读取richtext控件的text属性值。   值得注意的是,欲使插入该控件的程序打包发布后能正确运行,需要文件activex.x32的支持,如果目标系统没有安装注册该控件的话,应同时发布该控件richtx32.ocx并在目标机器上注册该控件。利用xtra activex函数对控件的检测与动态注册可参见authorware提供的例程activex.a4p(或activex.a5p)的相应部分。

   二、外部编辑法   在需要输入文本的时候,通过系统函数jumpoutreturn()调用windows的记事本程序编辑待输入的文本(并将其存盘),然后用系统函数readextfile()读取该文件,程序的结构如图2。 其中,第一个计算图标中置入:   jumpoutreturn("notepad.exe",recordslocation^"mystr.txt")   第二个计算图标中置入:   textstr:=readextfile(recordslocation^"mystr.txt")   这段程序还可以灵活些,比如使用open file dialog知识对象,通过一个打开文件对话框搜寻并返回(赋予变量)文本编辑程序或文本文件。

   三、外部函数法   使用随authorware安装光盘附带的一个ucd外部扩展函数文件:scrledit.u32,执行其中的函数scrolledit()将调出一个可以滚动输入的文本编辑框,具体用法可由下面的程序段实现(图3)。   在“设置变量”计算图标中置入:   left:=windowleft+100   top:=windowtop+100   right:=windowleft+500   bottom:=windowtop+300   在“等待输入”计算图标中置入:   teststr:=scrolledit("m","firstwindow",""^left^","^top^","^right^","^bottom^"",tab,"","system",12)   ——在演示窗口左上角(100,100)、右下角(500,300)的矩形区域开辟一个名为firstwindow的可编辑的滚动文本框,设置字体为system,字号为12,按tab键输入结束,输入的文本由textstr接收。   closewindow("firstwindow")   ——关闭指定的firstwindow窗口。   在显示图标“提示”中输入提示语:请输入,按tab键输入结束!   需要提醒注意的是:在文件scrledit.u32中函数scrolledit()的位置参数的语法描述(description)部分有一个小小的错误。另外,scrledit.u32应随打包文件一同发布。

   四、分页输入法   设计思路:虽然authorware的text entry交互响应一次不能实现长文本的输入,我们可以将待输入的文本分解为若干页(段)分别输入,以回车键enter作为每页输入的结束标志,即'\r'作为页与页之间的间隔符。变量textstr用以承接输入的文本,初值设为空,它的一行对应一页;pagenum记录当前的页号码,初值为1;每一页的内容可随时进行增、删、改操作。如图4,用一个交互结构生成分页文本编辑器: 其中,在“分页输入”的附着计算图标中置入:   currentpage:=getline(textstr,pagenum)   presetentry:=currentpage   presskey("rightarrow")   ——从串textstr中读取pagenum页/行的内容并在输入区显示。在“*--输入”计算图标中置入:   textstr:=replaceline(textstr,pagenum,entrytext)   pagenum:=pagenum+1   ——将当前输入页中的文本写入/替换textstr的对应页,进入下一页的编辑。   在“上一页”和“下一页”计算图标中分别置入:   textstr:=replaceline(textstr,pagenum,entrytext)   pagenum:=pagenum-1   textstr:=replaceline(textstr,pagenum,entrytext)   pagenum:=pagenum+1   在“删除本页”计算图标中置入:   textstr:=deleteline(textstr,pagenum)   pagenum:=linecount(textstr)   test(pagenum=0,pagenum:=1)   在交互图标中可以插入下列提示语:   当前是第{pagenum}页(共{linecount(textstr)+1}页)   在“全文浏览”分支中用一个显示图标显示文本:{textstr}(选取选单项text/scrolling),这样就可以对输入的文本进行全文预览,一个可输入任意长文本的简易编辑器制作完成。

   结语:上面给出的这四种方法各有长短,第一种方法实现的界面效果符合windows规范,但需对面向对象编程有所了解;第二种方法在打开记事本程序时,应注意本程序将放在后台运行;第三种方法实现较为简单,但需配置好函数scrolledit()的参数;第四种方法使用的是一种实现长文本输入的“迂回战术”。前三种方法能否正常运行依赖于目标系统的配置(控件是否正确安装、注册,外部编辑器或外部函数是否存在),而第四种方法与目标系统无关,是“纯”authorware的。