ccidnet????

出版日期:1999-09-06 总期号:855 本年期号:65

本期导读
要闻综合
电脑工作室
市场
硬件
软件
infotimes
为authorware增加标注功能

朱诗兵、何忠龙

  用过adobe acrobat的用户一定对其中的notes功能非常感兴趣,当你想在显示页面的某个地方写下自己的心得体会时,只要点击notes功能,则可输入你的各种想法、构思,并自动保存。对于常常自己写程序的用户,是否想在自己的作品中实现此功能呢?下面就利用richtextbox控件,在authorware多媒体创作平台中实现强大的标注功能。


  一、richtextbox控件


  richtextbox控件可用于输入和编辑文本,它提供了比常规的textbox控件更高级的格式特性。richtextbox控件提供了一些属性,通过这些属性的设置,可对该控件中任何部分的文本使用不同的格式进行控制。

  在richtextbox控件中是以rtf格式或ascii文本格式打开或保存文件的。可以使用该控件的loadfile和savefile功能直接读写文件,也可以设置filename属性,将.rtf或.txt 文件的内容装入该控件。如果需要对richtextbox控件中的内容进行全部或部分打印,可用selprint实现。

  按照缺省规定,richtextbox控件没有滚动条。在运行时,如果在该控件中装入了较大的文件,用户就不能看到文件的全部内容了。为使用户能够方便地进行滚动,可将其 scrollbars属性设置为1(水平的)、2(竖直的)或3(两个都有)。这必须在设计时完成,因为scrollbars属性在运行时是只读的。

  richtextbox控件的用途:

  ●作为“无底”的文本框,可用于编写阅读特别大的文本文件的应用程序;

  ●在任何应用程序中实现功能完备的、支持多种媒体信息的文本编辑。


  二、强大标注功能的具体实现


  在authorware多媒体创作平台中利用图标先建立一个如下的程序流程(参见图1)

  1.check for activex files计算图标

  在check for activex files计算图标中,利用系统固有的和用户自定义文件budapi.u32中的部分函数,编写如下程序:

if ~activexinstalled() then

  bamsgbox( ″请检查是否有activex控件!″,″军事航天通信原理″ , ″ok″ , ″information″, 0 )

  rtfocx:=1

  end if

  if ~activexcontrolquery(″{3b7c8860-d78f-101b-b9b5-04021c009402}″) then

  copiedfile:=bacopyfile( filelocation^″richtx32.ocx″,basysfolder(″system" )^″richtx32.ocx″, ″always″ )

  if ~copiedfile then

  activexcontrolregister(basysfolder(″system″ )^″richtx32.ocx″) ——注册.ocx

  else

  bamsgbox( ″系统子目录下没有richtx32.ocx!″,″军事航天通信原理″, "ok" , ″information″ , 0 )

  rtfocx:=1

  end if

  end if

  rtfcatalog:=filelocation^″notes″ ——rtf文件目录

  该段程序主要完成richtextbox控件在系统中的检测,以及设置用户标注后所保存rtf文件的目录。在参数rtfocx=0的情况下,才能实现强大的标注功能,否则不能。参数rtfcatalog设置为一个相对路径,标注所生成的rtf文件就保存在相对于运行程序的notes子目录下。

  2.rtf-bk显示图标

  该图标的主要功能是:给最终用户提供使用标注功能时的显示界面。它的设计风格直接关系到标注功能的使用方便程度以及美观程度。可以根据个人喜好设计一个标注界面,只是要注意richtextbox控件与你设计的标注界面要统一。

  3.readrtf11控件图标

  通过选单“insert”中的“control”操作,插入richtextbox控件,设置其属性,这里要注意的是,此时一定要根据需要对scrollbars属性进行设置,运行时不能修改scrollbars属性。至于修改richtextbox控件显示窗口大小,可以在运行时按下ctrl+p键,激活richtextbox控件,调整显示窗口大小,直到满意为止。

  4.rtf初始化计算图标

  根据参数rtfocx来判断是否可以进行rtf文件的读入,然后利用函数callsprite(方法loadfile),读入rtf文件rtfcatalog^"\\00.rtf",格式如下:

  if rtfocx=0 then callsprite(iconid@"readrtf11",#loadfile,rtfcatalog^"\\00.rtf",0)

  rtf文件名可以根据个人命名规则进行命名,也可以通过直接输入或计算得到rtf文件名。

  5.rtf-change计算图标

  当用户在richtextbox控件显示界面中双击时,激活事件dblclick,于是执行如下程序:

  if rtfocx=0 then callsprite(iconid@"readrtf11",#lsavefile,rtfcatalog^"\\00.rtf",0)

  完成对用户输入的内容保存,其保存文件名为rtfcatalog^"\\00.rtf" 。

  v6.esc计算图标

  当用户单击退出按钮或按下esc键时,执行如下程序:

  if rtfocx=0 then callsprite(iconid@"readrtf11",#lsavefile,rtfcatalog^"\\00.rtf",0)

  保证了退出时,对richtextbox控件内容的保存。

  7.erasertf擦除图标

  当rtf文件保存后,实现对rtf-bk图标和readrtf11图标的擦除,保持操作界面的可用性。

  如何真正实现像adobe acrobat中的notes功能,则需要进一步的修改。对于其交互响应,必须采用“热对象”方式,在标注状态下,在显示界面的任意位置双击,则弹出标注窗口,用户可以留下自己的见解,其内容可以包括文字、图像、图形、表格等信息;保存退出后,有标注的地方以小图标的形式表示,双击任意一个小图标,则可进入到标注的编辑状态,对具体的标注内容进行编辑,实现各种修改。至于具体的实现过程也不难,只要掌握了上面标注功能的设计思想,就可以做出与adobe acrobat中的notes功能一样的标注功能,甚至比它还强大。




  图1