该程序主要实现对通讯录的浏览、增加和删除功能,实现是把保存在文本文件中的数据读取出来,依次存放在一个列表中,再对列表进行操作来实现相应的功能,.在用户退出时再把列表中的内容保存回文本文件中。
其中文本文件的最后部分内容如图14.14所示。
图 14.14 文本文件中的内容
下面是具体的实现过程:
1.进入Authorware ,新建一个文件,保存为“对象_Demo.a6p”。打开文件属性设置对话框,设置程序窗口大小为Variable,选中Center on Screen,取消Title Bar和Menu Bar前的选择。
2.在程序开头拖入一个计算图标,命名为“读取文本”,在其中加入以下语句:
--设置窗口大小
ResizeWindow(320,240)
--定义一个空的列表
wen:=[]
tem:=[]
--创建一个Fileio Xtra的子对象
zil:=NewObject("fileio")
--以只读方式打开文本文件
CallObject(zil, "openFile", FileLocation^"ziliao1.txt",1)
--依次读取该文本文件的行,存放到列表中
temp:=CallObject(zil,"readLine")
i:=1
repeat while temp<>-1
repeat with p:=1 to 4
tem[p]:=GetWord(p,temp)
end repeat
wen[i]:=[#name:tem[1],#sex:tem[2],#age:tem[3],#tel:tem[4]]
temp:=CallObject(zil, "readLine")
temp:=SubStr(temp,2,CharCount(temp))
i:=i+1
end repeat
--关闭文本文件
CallObject(zil, "closeFile")
--初始化一个计数器
j:=1
--统计列表wen中元素的个数
geshu:=ListCount(wen)
说明:虽然系统函数ReadExtFile()也可以读取文本文件的内容,但当文本文件比较大时,所获得的字符串就比较大,对其进行处理就会影响程序的运行程序,且会受到Authorware中字符串的最大字符数的影响。所以此处使用Fileio Xtra中的OpenFile函数来打开文件,此时实际上获得的是指向该文本文件的指针。另外打开一个文件用完后最好马上关闭它。
3.拖入一个显示图标到流程线上,命名为“显示记录”,双击打开该显示图标的展示窗口,用文字工具输入如图14.15所示的文字。
图 14.15 显示图标“显示记录”中的标签
然后在“姓名:”后输入语句:{wen[j][#name]};在“性别:”后输入语句:{wen[j][#sex]};在“年龄:”后输入语句:{wen[j][#age]};在“电话:”后输入语句:{wen[j][#tel]}。
选择菜单命令Modify>Icon>Properties,.在弹出的显示图标属性对话框中选中Update Displayed Variables,单击OK按钮关闭对话框。
4.在显示图标“显示记录”的下方拖入一个交互图标,命名为“控制”。
⑴在交互图标“控制”的右边放置一个计算图标,命名为“上一个”,在弹出的对话框中选择Button,双击新加入的计算图标上方的响应图标,在弹出的按钮响应属性对话框中按图14.16所示进行设置。设置好后单击“OK”关闭对话框
图 14.16 按钮响应图标的属性设置对话框
在计算图标“上一个”中加入以下语句:
j:=j-1
⑵在计算图标“上一个”的右边加入一个计算图标,命名为“下一个”,双击其上方的响应图标,在弹出的如图14.16所示的对话框中把选项“ActiveX If”改为“j<geshu”。
在计算图标“下一个”中加入以下语句:
j:=j+1
⑶在计算图标“下一个”的右边加入一个计算图标,命名为“删除”。
在计算图标“删除”中加入以下语句:
--从列表中删除当前记录
xuan:=MessageBox(WindowHandle, "真的要删除当前记录吗?", "提醒", 292)
--6=Yes, 7=No
if xuan=6 then
--从列表中删除当前记录
DeleteAtIndex(wen,j)
--如果当前记录是最后一个记录,更改计数器的值
if j=geshu then
j:=j-1
end if
--更改列表的个数
geshu:=geshu-1
end if
⑷在计算图标“下一个”的右边加入一个群组图标,.命名为“添加”。双击群组图标“添加”打开其流程窗口。
①拖入一个擦除图标,命名为Cha,在该擦除图标中要擦除的是按钮“上一个”、“下一个”、“删除”、“添加”。
②使用菜单命令Insert>Control>ActiveX…依次插入四个ActiveX控件,第一个是TextBox控件,第二个是ComboBox控件,第三、四个是TextBox控件,其中TextBox控件的属性中设置属性项Font为黑体12号,属性项ForeColor设置为蓝色;ComboBox控件的属性中属性项Font、ForeColor也同上设置,另设置属性项Style为“2-DropDownList”。
把这四个控件图标依次命名为xm、xb、nl、dh,然后运行程序单击“添加”按钮后再暂停调整这些控件的位置和大小。
具体的属性设置和调整可以参见ActiveX控件一章的介绍。
③拖入一个计算图标,命名为“给xb赋值”,在其中输入以下内容:
CallSprite(@"xb", #AddItem,"男")
CallSprite(@"xb", #AddItem,"女")
④拖入一个交互图标,命名为“选择”。拖一个群组图标到该交互图标的右边,命名为“确定”,在弹出的响应类型对话框中选择Button,单击“OK”关闭对话框,双击图标“确定”上方的响应图标,在弹出的按钮响应属性设置对话框中按图14.16所示进行设置。
双击“确定”群组图标打开其流程窗口。拖入一个计算图标,命名为“增加记录”,在其中输入以下内容:
--获得四个控件图标中的值
tem[1]:=GetSpriteProperty(@"xm", #text)
tem[2]:=GetSpriteProperty(@"xb", #text)
tem[3]:=GetSpriteProperty(@"nl", #text)
tem[4]:=GetSpriteProperty(@"dh", #text)
--判断xm图标中的值是否为空,即是否输入了姓名
if tem[1]<>"" then
--如果输入了姓名就在列表最后增加一个元素
geshu:=geshu+1
wen[geshu]:=[#name:tem[1],#sex:tem[2],#age:tem[3],#tel:tem[4]]
j:=geshu
else
--否则就显示出错信息,并根据用户的选择给出不同的反应
xuan:=MessageBox(WindowHandle, "没输入姓名,不能添加记录!", "出错", 21)
-- 4=Retry, 2=Cancel
if xuan=4 then GoTo(IconID@"xm")
end if
拖一个擦除图标到“增加记录”的下方,该图标要擦除的是四个控件图标和按钮“确定”以及将要增加的按钮“取消”。
再拖入一个计算图标,命名为“返回”,在其中输入以下内容:
GoTo(IconID@"显示记录")
关闭“确定”的流程窗口回到“添加”图标的流程窗口,选中图标“确定”,再按Ctrl+C键,然后在“确定”图标的右边单击鼠标,将粘贴指针移到此处,按Ctrl+V键。将新粘贴过来的图标改名为“取消”。
双击图标“取消”打开其流程窗口,删除计算图标“增加记录”。
⑸关闭群组图标“添加”的流程窗口回到主流程窗口,.拖一个计算图标到“添加”图标的右边,命名为“退出”,在其中输入以下内容:
--创建一个Fileio Xtra的子对象
zil:=NewObject("fileio")
--以只写方式打开文本文件
CallObject(zil, "openFile", FileLocation^"ziliao.txt",2)
--删除该文件
CallObject(zil, "delete")
--创建一个同名文件
CallObject(zil, "createFile", FileLocation^"ziliao.txt")
--关闭文本文件
CallObject(zil, "closeFile")
--依次把列表中的值添加到文本文件中
repeat with i:=1 to geshu
str:=wen[i][#name]^" "^wen[i][#sex]^" "^wen[i][#age]^" "^wen[i][#tel]^"\r"
AppendExtFile(FileLocation^"ziliao.txt",str)
end repeat
AppendExtFile(FileLocation^"ziliao.txt","-1")
Quit()
5.整个程序的流程如图14.17所示。
图 14.17 程序流程图
擦除图标通常可以在基本程序完成后再来设置,这样就容易设置有擦除的图标。