版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第13章Authorware7.0典型实例介绍
13.1在Authorware中控制Windows系统
13.2增强应用程序的窗口功能
13.3在Authorware中连接数据库
13.4图像展示技巧介绍
13.5解决与文本有关的几个问题
13.6其它典型实例
13.1在Authorware中控制Windows系统
13.1.1在运行中获取并改变分辨率
1.程序设计程序开始运行时,首先探测当前计算机所支持的各种分辨率,然后查找其中是否有我们所需要的分辨率。如果有,则直接切换其分辨率;如果没有,则给出提示,然后退出程序。
2.核心技术
本例主要使用Authorware外部函数alTools.u32中的alChangeRes()函数和alGetDispSet()函数。
3.典型函数用法介绍
↘alChangeRes()函数
格式:alChangeRes(Width,Height,bitpp,ifreq)
说明:本函数用于动态改变屏幕分辨率和刷新率。
参数:Width,宽度(以像素为单位);
Height,高度(以像素为单位);
bitpp,颜色位数;
ifreq,屏幕刷新率(赫兹)。
↘alGetDispSet()函数
格式:result:=alGetDispSet()
说明:本函数用于获得当前所有可用屏幕分辨率及刷新率。其返回值的格式是用回车符分隔的多行字符串,每一行类似于“800x600x32x75”等。
4.具体制作
(1)创建如图13-1所示的程序流程。
(2)在函数窗口中载入外部函数alTools.u32,并选择其中的alChangeRes()和alGetDispSet()。图13-1(3)在“初始化”计算图标中输入以下代码:
width:=ScreenWidth
height:=ScreenHeight
depth:=ScreenDepth
w0:="1024" --设置需要的分辨率宽度
h0:="768" --设置需要的分辨率高度
d0:="32" --设置需要的颜色深度
allSet:=alGetDispSet()
ifw0=width&h0=height&d0=depththen
GoTo(IconID@"主程序开始")
endif在“判断分辨率”计算图标中输入以下代码:
lcount:=LineCount(allSet)
repeatwithl:=1tolcount
s:=GetLine(allSet,l)
p:=Find("x",s)
w:=Eval(SubStr(s,1,p-1))
s:=SubStr(s,p+1,50)
p:=Find("x",s)
h:=Eval(SubStr(s,1,p-1))
s:=SubStr(s,p+1,50)
p:=Find("x",s)
d:=Eval(SubStr(s,1,p-1))
ifw=w0&h=h0&d=d0then
alChangeRes(w,h,d)
goto(iconid@"主程序开始")
elseifl=lcountthen
goto(iconid@"错误信息")
endif
endrepeat在“错误信息”显示图标中输入以下提示信息:
对不起,你的屏幕显示不支持{w0}x{h0}x{d0}的分辨率,演示无法继续下去!按任意键退出程序。
在“恢复原有屏幕设置”计算图标中输入以下代码:
alChangeRes(width,height,depth)
最后的“主程序开始”计算图标里面没有具体内容,可直接给出一个注释语句。13.1.2关闭/打开任务栏
1.程序设计
程序开始运行时,使用FindWindow()函数捕捉Windows任务栏,然后再用SetWindowPos()函数隐藏任务栏。程序退出时,再用SetWindowPos()函数打开任务栏。
2.核心技术
本例主要使用Winapi.u32里的SetWindowPos()函数和FindWindow()函数来实现任务栏的关闭和打开。
3.典型函数用法介绍
↘FindWindow()函数
格式:HWND:=FindWindow(LPCSTRlpClassName,LPCSTRlpWindowName)
说明:寻找并返回指定窗口的句柄。
参数:lpClassName,类名;
lpWindowName,窗口名。
↘SetWindowPos()函数
格式:BOOL:=SetWindowPos(HWNDhWnd,HWNDhWndInsertAfter,intX,intY,intcx,intcy,UINTuFlags)说明:设置指定窗口的位置。
参数:hWnd,窗口句柄;
hWndInsertAfter,位于hWnd窗口前的窗口的句柄;
X,新位置的左边界;
Y,新位置的右边界;
cx,窗口新的宽度;
cy,窗口新的高度。
返回值:如果操作成功,则返回非0值;如果操作失败,则返回0。4.具体制作
(1)创建如图13-2所示的程序流程。图13-2(2)在Authorware里载入函数Winapi.u32(该文件位于安装好的Authorware文件夹内)。
(3)在“关闭任务栏”计算图标里输入以下代码:
winhd:=FindWindow("Shell_traywnd")
SetWindowPos(winhd,0,0,0,0,0,128)
msg:="已关闭任务栏\r单击继续"
在“打开任务栏”计算图标里输入以下代码:
SetWindowPos(winhd,0,0,0,0,0,64)
msg:="已打开任务栏\r单击退出"
在“退出”计算图标里输入以下代码:
Quit()
(4)在“显示提示信息”显示图标里输入以下内容:
{msg}
请根据个人喜好设置文字的大小等相关属性,然后再勾选该显示图标属性面板“选项”中的“更新显示变量”。
(5)两个等待图标的“事件”都设置成“单击鼠标”即可。13.1.3禁用Windows的某些系统功能
1.程序设计
在本例中,我们通过复选框的形式,分别可控制任务栏的打开和关闭、托盘图标的显示和隐藏、“开始”按钮的显示和隐藏、Windows键的打开和关闭、鼠标失效与否、关闭和恢复屏幕保护、强行关闭计算机和强行重启计算机等。
2.核心技术
本例主要使用DisablePro控件来禁用或启用Windows的某些系统功能;用MicrosoftForms2.0CheckBox控件来实现各功能开关的设置或取消设置;用budapi.u32外部函数中的baMsgBox()函数来弹出信息提示框。
3.典型函数用法介绍
↘DisablePro控件
属性:该控件有9个属性,如图13-3所示。每个属性的值都可设置为True或False,分别对应该功能的启用和关闭。这9个属性分别是:
DisableDesktop,是否隐藏桌面;
DisableIconTray,是否隐藏托盘图标;
DisableMouse,是否启用鼠标;
DisableScreenSaver,是否启用屏幕保护程序;
DisableStartButton,是否显示Windows的“开始”按钮;
DisableTaskBar,是否显示任务栏;图13-3DisableTaskSwitching,是否启用Windows的开关键(包括Ctrl+Esc、Ctrl+Alt+Delete、Alt+Tab、Windows键);
DisableTrayClock,是否显示任务栏时钟图标;
Enabled,DisablePro控件是否有效。
方法:ForceReboot,强行重新启动计算机;
ForceShutDown,强行关闭计算机。
↘MicrosoftForms2.0CheckBox控件
属性:Caption,控件的标题;
Value,返回值(控件如被选中,则返回“True”,否则返回“False”)。↘baMsgBox()函数
格式:Result:=baMsgBox(Message,Caption,
Buttons,Icon,DefButton)
说明:该函数可弹出一个信息窗口,显示一些提示信息。
参数:Message,需要在弹出窗口中显示的字符串;
Caption,弹出窗口的标题栏文字;
Icon,弹出窗口中图标的形式,可以是Stop(停止图标)、Information(信息图标)、Question(问号图标)、Exclamation(感叹号图标)、NoIcon(无图标);
Buttons,弹出窗口中按钮的形式,可以是OK(确定)、OKCancel(确定、取消)、RetryCancel(重试、取消)、AbortRetryIgnore(放弃、重试、取消)、YesNo(是、否)、YesNoCancel(是、否、取消)。
返回值:该函数的返回值是用户点击的按钮的名称。4.具体制作。
(1)创建如图13-4所示的程序流程。图13-4其中,“DisablePro”和“显示各功能复选框”里的所有图标都是用控件做的。为了在菜单【插入】/【控件】/【ActiveX...】中找到DisablePro控件,必须先注册该控件。方法是在“控件注册”计算图标中输入以下代码:
classID:="{9CD81531-6B69-11D1-83EE-00C0D1571EDC}"
ifActiveXControlQuery(classID)=0then
ActiveXControlRegister(FileLocation^"DisablePro.ocx")
endif
然后运行此程序即完成注册。完成注册后,即可在SelectActiveXControl对话框中找到DisablePro.Disable控件。
我们用来做复选框的控件MicrosoftForms2.0CheckBox不需要单独注册,因为它已经在安装OFFICE组件时被注册好了。(2)在“设置属性”计算图标中输入以下代码(以设置9个复选框的标题):
SetSpriteProperty(@"关闭任务栏",#Caption,IconTitle@"关闭任务栏")
SetSpriteProperty(@"隐藏托盘图标",#Caption,IconTitle@"隐藏托盘图标")
SetSpriteProperty(@"隐藏开始按钮",#Caption,IconTitle@"隐藏开始按钮")
SetSpriteProperty(@"使Windows开关键失效",#Caption,IconTitle@"使Windows开关键失效")
SetSpriteProperty(@"使鼠标失效",#Caption,IconTitle@"使鼠标失效")SetSpriteProperty(@“强行关机”,#Caption,IconTitle@“强行关机”)
SetSpriteProperty(@“强行重新启动计算机”,#Caption,IconTitle@“强行重新启动计算机”)
SetSpriteProperty(@"关闭屏幕保护",#Caption,IconTitle@"关闭屏幕保护")
SetSpriteProperty(@"退出",#Caption,IconTitle@"退出")
message:=""当然,也可直接到复选框控件的属性里去设置Caption属性。
在“*”按键所响应的下面的计算图标里输入以下代码:
SetSpriteProperty(@"DisablePro",#DisableMouse,FALSE)
message:=""
在“-关闭任务栏”事件响应的计算图标中输入以下代码:
SetSpriteProperty(@"DisablePro",#DisableTaskbar,GetSpriteProperty(@"关闭任务栏",#value))
在“-隐藏托盘图标”事件响应的计算图标中输入以下代码:
SetSpriteProperty(@"DisablePro",#DisableIconTray,GetSpriteProperty(@"隐藏托盘图标",#value))在“-隐藏开始按钮”事件响应的计算图标中输入以下代码:
SetSpriteProperty(@"DisablePro",#DisableStartbutton,GetSpriteProperty(@"隐藏开始按钮",#value))
在“-使Windows开关键失效”事件响应的计算图标中输入以下代码:
SetSpriteProperty(@"DisablePro",#DisableTaskSwitching,GetSpriteProperty(@"使Windows开关键失效",#value))
在“-使鼠标失效”事件响应的计算图标中输入以下代码:
SetSpriteProperty(@"DisablePro",#DisableMouse,GetSpriteProperty(@"使鼠标失效",#value))If~GetSpriteProperty(@“使鼠标失效”,#value)then
message:=“”
else
message:=“按任意键恢复鼠标”
endif
在“-强行关机”事件响应的计算图标中输入以下代码:
Result:=baMsgBox("真的要关闭计算机吗?","注意","YesNo","Information",2)
ifCapitalize(Result)="YES"then
CallSprite(@"DisablePro",#ForceShutDown)
else
SetSpriteProperty(@"强行关机",#value,FALSE)
endif在“-强行重新启动计算机”事件响应的计算图标中输入以下代码:
Result:=baMsgBox(“真的要重新启动计算机吗?”,“注意”,“YesNo”,“Information”,2)
ifCapitalize(Result)=“YES”then
CallSprite(@“DisablePro”,#ForceReboot)
else
SetSpriteProperty(@“强行重新启动计算机”,#value,FALSE)
endif在“-关闭屏幕保护”事件响应的计算图标中输入以下代码:
SetSpriteProperty(@“DisablePro”,#DisableScreenSaver,
GetSpriteProperty(@“关闭屏幕保护”,#value))
在“-退出”事件响应的计算图标中输入以下代码:
Quit()
(3)双击交互响应图标,在演示窗口中输入标题及提示信息:
禁用Windows的某些系统功能
{message}
设置合适的文字大小及颜色,并设置居中对齐,再勾选交互图标属性面板中的“显示”标签下面的“更新显示变量”。
(4)设置事件响应的相关属性。依次设置事件响应的“发送者”和“事件”,如图13-5所示。图13-5
(5)发布程序后可试着运行一下,其界面如图13-6所示。值得注意的是,测试完毕后,需要把相关的选项重新打开,以免影响正常的Windows操作。图13-6
13.1.4制作电子闹钟
1.程序设计
本例将制作一个电子闹钟,重点是使用系统变量FullTime。闹钟的时间设置有两种方法:一是由用户直接输入HH:MM:SS格式的时间;二是由用户直接输入一个延时时间。若只输入一个数字,则被认作是秒数;若输入由冒号分隔的两个数字,则被看成是分钟数和秒钟数;若输入的是由冒号隔开的三个数字,则被看成是小时数、分钟数和秒钟数。两种方式下,时间到后都开始响铃。
2.核心技术
本例使用MicrosoftForms2.0OptionButton控件来做单选按钮,以控制是设置延时时间还是设置指定时间。在判断时间上,本例使用了多个时间类的系统变量(如FullTime、Hour、Minute、Sec)和字符串处理函数(如String()、Substr()、Find()、RFind()等)。
3.具体制作
(1)创建如图13-7所示的程序流程。
(2)“输入闹钟时间”和“输入延时时间”都是MicrosoftForms2.0OptionButton控件,分别设置其Caption属性为“输入闹钟时间”和“输入延时时间”即可。
(3)“闹钟”图标是一个GIF动画,当响铃时会出现一个跳动的闹钟。“声音”图标就是一段闹铃声。
(4)“停止”按钮用于结束程序,在其下挂计算图标中输入“Quit()”即可。
(5)在“*”文本响应的下挂计算图标中输入以下代码:图13-7ifGetSpriteProperty(@"输入闹钟时间",#value)=-1then
t0:=EntryText
else
k1:=Find(":",EntryText)
k2:=RFind(":",EntryText)
ifk1=0then
s:=EntryText
m:=0
h:=0
else
ifk1=k2then
m:=SubStr(EntryText,1,k1-1)
s:=SubStr(EntryText,k1+1,100)
h:=0
else
h:=SubStr(EntryText,1,k1-1)
m:=SubStr(EntryText,k1+1,k2-1)
s:=SubStr(EntryText,k2+1,100)
endif
endif
m:=Test(Minute+m<10,"0","")^String(Minute+m)
s:=Test(Sec+s<10,"0","")^String(Sec+s)
t0:=String(Hour+h)^":"^m^":"^s
endif
(6)条件响应“t0<=FullTime”用于判定时间是否已到。其属性面板设置如图13-8所示。图13-8
(7)在“定时”交互的演示窗口里插入闹钟的GIF动画文件(通过【插入】/【图像】菜单来完成),再勾选其“显示”标签中的“更新显示变量”选项,最后在其中输入以下内容:
电子闹钟
当前时间:{FullTime}
整个界面如图13-9所示。图13-9
(8)打包程序,然后选择“输入闹钟时间”或“输入延时时间”,再输入具体的时间,回车即可进入闹钟计时。
在此程序的基础上,大家可以动动脑筋,把程序修改一下。比如,在时间的输入上加上更加复杂的判断处理。例如,输入“120”,程序会自动判断出是延时2分钟。又如,对用户输入的内容进行判断,看是否包含除数字和冒号以外的其它内容等。13.1.5为演示窗口添加最大化和最小化按钮
Windows标准的应用程序窗口都有最大化、最小化和关闭按钮。而Authorware默认的演示窗口是没有最大化和最小化按钮的。如果想要做一个标准的Windows应用程序风格的应用程序,我们可通过其它方法加上最大化和最小化按钮。
1.程序设计
本例主要使用Authorware外部Xtras文件(budapi.x32)中的baAddSysItems()函数来添加最大化和最小化按钮。
2.核心技术
前面我们做了很多Authorware的外部函数,也知道了使用外部函数的方法。而本例中所使用到的是一个外部Xtras文件(budapi.x32),需要事先将其复制到Authorware安装文件夹下的Xtras文件夹里去,这样,当我们再次启动Authorware时,在“函数”面板的“分类”中就会多出一个“XtraBudAPI”类,其中有多个函数可直接使用。
3.典型函数用法介绍
↘baAddSysItems()函数
格式:baAddSysItems(WinHandle,SysMenu,MinBox,MaxBox)
说明:该函数用于给指定窗口添加系统菜单和最小化、最大化按钮。
参数:WinHandle,是Authorware中的一个系统变量,代表当前演示窗口的句柄;
SysMenu,是否添加系统菜单,其值为True或False;
MinBox,是否添加最小化按钮,其值为True或False;
MaxBox,是否添加最大化按钮,其值为True或False。
4.具体制作
(1)制作如图13-10所示的程序流程。图13-10
(2)在“重新设置窗口大小”计算图标里输入以下代码:
ResizeWindow(360,200)
(3)在“提示信息”显示图标里输入以下内容:
按任意键添加系统菜单和最大化及最小化按钮...
(4)在“添加系统菜单及最大化和最小化按钮”计算图标中输入以下代码:
baAddSysItems(WindowHandle,TRUE,TRUE,TRUE)
(5)打包运行程序,效果如图13-11和图13-12所示。图13-11
图13-1213.2增强应用程序的窗口功能
13.2.1使用文件系统控件显示文件夹和文件
1.程序设计本例主要是使用WinCtrls.u32中的wcDisplayControl()函数来显示驱动器列表框、文件夹列表框和文件列表框。当改变驱动器列表框中的内容时,文件夹列表框和文件列表框中的内容会同步更新。当选择具体的某个文件后,在界面中会显示出当前所选文件的完整路径及文件名。
2.核心技术
本例主要是综合应用WinCtrls.u32中的wcDisplayControl()函数、wcGetPropertyValue()函数和wcSetPropertyValue()函数以及条件响应来完成制作。
3.典型函数用法介绍
↘wcDisplayControl()函数
格式:Id:=wcDisplayControl(Left,Top,Width,Height,"ControlName","ChangeEventVarName")
说明:该函数用于在指定的位置上显示一个指定的控件,并返回控件ID号以供后续操作。参数:Left,控件的左上角位置(x坐标)。
Top,控件的左上角位置(y坐标)。
Width,控件的宽度。
Height,控件的高度。
ControlName,控件名,共有20种控件,分别是:
●Button,按钮控件;
●CheckBox,复选框控件;
●CheckListBox,复选框列表控件;
●ColorCombo,颜色组合框控件;
●ComboBox,组合框控件;
●DriverCombo,驱动器组合框控件;
●Edit,单行文本编辑框控件;●FileListBox,文件列表框控件;
●FolderListBox,文件夹列表框控件;
●FontCombo,字体组合框控件;
●ListBox,列表框控件;
●MaskEdit,模板编辑框控件;
●Memo,多行文本框控件;
●PasswordEdit,密码框控件;
●RadioButton,单选按钮控件;
●SpinButton,数值调节按钮控件;
●SpinEdit,数值调节按钮文本框控件;
●TabSet,标签组控件;
●TrackBar,滑动条控件;
●TreeView,树形控件。
ChangeEventVarName,控件返回的事件变量名称,可在Authorware中通过判断此变量的值来判断用户更改了哪些控件,以进行相应的操作。当用户对控件操作后,该变量的值会从False变成True。
返回值:返回控件的ID编号,此编号可用于对控件的后续操作。
↘wcGetPropertyValue()函数
格式:Value:=wcGetPropertyValue(Id,"PropertyName")
说明:该函数用于获取指定控件的指定属性的值。
参数:Id,所操作控件的标识号;
PropertyName,属性名称。返回值:指定控件的指定属性的值。
↘wcSetPropertyValue()函数
格式:Result:=wcSetPropertyValue(Id,"PropertyName","Value")
说明:该函数用于设置指定控件的指定属性的值。
参数:Id,所操作控件的标识号;
PropertyName,属性名称;
Value,设置的指定属性的值。
返回值:操作成功,返回一个空字符串。
4.具体制作
(1)创建如图13-13所示的程序流程。
(2)在“初始化”计算图标中输入以下代码:
DriveId:=wcDisplayControl(20,80,290,20,"DriveCombo","ChangeDrive")
FolderId:=wcDisplayControl(20,130,280,180,"FolderListBox","ChangeFolder")
FileId:=wcDisplayControl(330,80,280,230,"FileListBox","ChangeFile")
wcSetPropertyValue(DriveId,"FontName","TimesNewRoman")
wcSetPropertyValue(DriveId,"FontColor","Blue")
wcSetPropertyValue(DriveId,"FontSize",14)
wcSetPropertyValue(FolderId,"Drive",wcGetPropertyValue(DriveId,"Drive"))
wcSetPropertyValue(FolderId,"FontName","TimesNewRoman")
wcSetPropertyValue(FolderId,"FontColor","Black")
wcSetPropertyValue(FolderId,"FontSize",12)
wcSetPropertyValue(FileId,"FontName","TimesNewRoman")
wcSetPropertyValue(FileId,"FontColor","Green")
wcSetPropertyValue(FileId,"FontSize",12)
fullfilename:=""图13-13在“ChangeDrive”条件响应的下挂计算图标中输入以下代码:
wcSetPropertyValue(FolderId,"Drive",wcGetPropertyValue(DriveId,"Drive"))
在“ChangeFolder”条件响应的下挂计算图标中输入以下代码:
wcSetPropertyValue(FileId,"Folder",wcGetPropertyValue(FolderId,"Folder"))
在“ChangeFile”条件响应的下挂计算图标中输入以下代码:
fullfilename:=wcGetPropertyValue(FileId,"Folder")^"\\"^wcGetPropertyValue(FileId,"Text")
其中各条件语句的“自动”选项都设置为“当由假为真”。
(3)双击交互图标,在其演示窗口中输入一些提示文字,如图13-14所示。
(4)打包程序,运行效果如图13-15所示。图13-14图13-15
13.2.2制作增强型的下拉菜单
1.程序设计
在本例中,我们制作了两个菜单,选择某一具体菜单项后,会有提示信息显示我们选择了哪个具体的菜单项。同时,专门设置了一个测试菜单项,可对该菜单项进行动态的修改等处理。
2.核心技术
本例的关键是使用到了两个外部函数Edit.u32和Budmenu.u32。
3.典型函数用法介绍
↘EditboxErase()函数
格式:EditboxErase()
说明:该函数用于从演示窗口删除文本编辑框。
↘EditboxGetText()函数
格式:cut_string:=EditboxGetText()
说明:该函数用于取得编辑框中的结果。
返回值:返回编辑框中的文本内容。↘EditboxDisplay()函数
格式:result:=EditboxDisplay(string,x_coord,y_coord,height,width)
说明:该函数用于显示一个带滚动条的文本编辑框。
参数:string,在文本编辑框中显示的初始化字符;
x_coord,文本编辑框左上角坐标(x坐标);
y_coord,文本编辑框左上角坐标(y坐标);
height,文本编辑框的高度;
width,文本编辑框的宽度。↘mCreatePopupMenu()函数
格式:menu:=mCreatePopupMenu()
说明:该函数用于创建一个空的菜单。
返回值:如果创建成功,则返回一个菜单句柄(该句柄在其它函数里会多次用到);如果创建失败,则返回0。↘mAppendMenu()函数
格式:ok:=mAppendMenu(Menu,Flags,IDNewItem,NewItem)
说明:该函数用于在指定菜单(Menu)后面添加一个新的菜单项。
参数:Menu,由mCreatePopupMenu()函数返回的菜单句柄。
Flags,由数字构成,其值决定了菜单项的一些相关属性;
●0,普通的菜单项;
●1,使菜单项变成灰色(禁用);
●2,禁用菜单项,但菜单项不变成灰色;
●8,给菜单项添加选中标志;
●16,创建级联菜单(子菜单);
●2048,创建一个菜单项之间的分隔条。
IDNewItem,新创建的菜单项的ID。该ID由数字构成,由用户自己设定,每一个菜单项有一个惟一的ID标记,绝对不能重复。
NewItem,新创建的菜单项的名称。如果要在菜单项中添加快捷操作键,则可在指定快捷字母前加“&”。
↘mCheckMenuItem()函数
格式:ok:=mCheckMenuItem(Menu,IDEnableItem,Check)
说明:该函数用于设置指定菜单项前是否添加选中标记。
参数:Menu,指定菜单项的菜单句柄;
IDEnableItem,菜单项的ID标记;
Check,是否添加选中标记。若其值为0,则取消选中标记;若其值为8,则添加选中标记。返回值:如果操作成功,则返回True,否则返回False。
↘mDestroyMenu()函数
格式:ok:=mDestroyMenu(Menu)
说明:该函数用于删除指定的菜单。
参数:Menu,菜单句柄。
返回值:如果操作成功,则返回True,否则返回False。
↘mEnableMenuItem()函数
格式:ok:=mEnableMenuItem(Menu,IDEnableItem,Enable)
说明:该函数用于启用、禁用或变灰指定的菜单项。参数:Menu,菜单句柄;
IDEnableItem,菜单项的ID标记;
Enable,此值为0,表示启用该菜单项;此值为1,表示禁用该菜单项,同时菜单项变成灰色;此值为2,表示禁用该菜单项,菜单项不变灰。
返回值:如果操作成功,则返回True,否则返回False。
↘mTrackPopupMenu()函数
格式:ok:=mTrackPopupMenu(Menu,Flags,X,Y,Reserved,WindowHandle,Rect)
说明:该函数用于显示一个菜单。参数:Menu,菜单句柄;
Flags,参见mCreatePopupMenu()函数中的Flags参数,通常,此值为0;
X,菜单的x坐标;
Y,菜单的y坐标;
Reserved,此值固定为0;
WindowHandle,Authorware的系统变量,表示当前演示窗口的句柄。
返回值:菜单正常显示后,返回True,否则返回False。
↘mGetLastMenuID()函数
格式:ID:=mGetLastMenuID()
说明:该函数用于记录用户选择了哪一个菜单项。
返回值:所选菜单项的ID。↘mGetMenustate()函数
格式:state:=mGetMenustate(Menu,IDItem,Flags)
说明:该函数用于检查指定菜单项的状态,比如是否有选中标记、是否启用等。
参数:Menu,菜单句柄;
IDItem,指定菜单项的ID;
Flags,参见mCreatePopupMenu()函数中的Flags参数。
返回值:根据Flags的值返回不同的值。
↘MenuHookOn()函数
格式:res:=MenuHookOn(WindowHandle)
说明:该函数用于安装菜单挂钩,也就是让菜单和Authorware之间建立联系。安装好挂钩后,该挂钩会一直起作用,直到调用MenuHookOff()解除挂钩为止。参数:WindowHandle,演示窗口的句柄。
返回值:如果操作成功,则返回True,否则返回False。
↘MenuHookOff()函数
格式:MenuHookOff()
说明:该函数用于解除菜单挂钩。
↘mModifyMenu()函数
格式:ok:=mModifyMenu(Menu,Position,Flags,IDNewItem,NewItem)
说明:该函数用于修改指定的菜单项。参数:Menu,菜单句柄;
Position,指定菜单项的ID;
Flags,此值通常为0;
IDNewItem,新菜单项的ID值,如果只修改菜单项的名称而不修改它的顺序,则此值应与Position的值相同;
NewItem,修改后的新的菜单名称。
返回值:如果操作成功,则返回True,否则返回False。
4.具体制作
(1)创建如图13-16所示的程序流程(其中还有一个“添加菜单项”按钮没有显示出来),然后载入外部函数Budmenu.u32和Edit.u32。图13-16
(2)在“创建菜单”计算图标中输入以下代码:
LastMenuID:=-1 --选中菜单号的初值
SelectMenu:=mCreatePopupMenu()--创建文件菜单
mAppendMenu(SelectMenu,0,10,"打开\tCtrlO") --添加文件菜单项
submenu:=mCreatePopupMenu() --创建子菜单
mAppendMenu(submenu,0,20,"保存为*.txt文件") --添加子菜单项
mAppendMenu(submenu,0,21,"保存为*.doc文件")
mAppendMenu(submenu,0,22,"保存为*.rtf文件")
mAppendMenu(submenu,0,23,"保存为*.html文件")
mAppendMenu(submenu,2048,0,"")--添加一个分隔线
mAppendMenu(submenu,0,24,"取消")--再添加一个子菜单项
mCheckMenuItem(submenu,20,8)--使20菜单项前加一个选中标记
mEnableMenuItem(submenu,23,1)--禁用23菜单项
mAppendMenu(SelectMenu,16,submenu,"保存")--添加主菜单项并有级联菜单
mAppendMenu(SelectMenu,0,11,"退出\tCtrlQ") --再添加一个主菜单项
EditMenu:=mCreatePopupMenu() --创建编辑菜单
ok:=mAppendMenu(EditMenu,0,30,"复制\tCtrlC") --添加四个菜单项
ok:=mAppendMenu(EditMenu,0,31,"剪切")
ok:=mAppendMenu(EditMenu,0,32,"粘贴")
ok:=mAppendMenu(EditMenu,0,33,"测试项")
appendMenuID:=37 --下一个添加菜单的号
mMenuHookOn(WindowHandle)--安装与Authorware的连接挂钩
Message:=""
(3)在“显示信息”显示图标里输入以下内容:
{message}
并勾上“更新显示变量”选项。
(4)在“激活菜单1”计算图标里输入以下代码:
mTrackPopupMenu(SelectMenu,0,ResponseLeft@"文件"+WindowLeft,ResponseTop@"文件"+ResponseHeight@"文件"+WindowTop,0,WindowHandle,0)
在“返回选项1”计算图标里输入以下代码:
LastMenuID:=mGetLastMenuID()
Checked@"文件":=FALSE
(5)在“激活菜单2”计算图标里输入以下代码:
mTrackPopupMenu(EditMenu,0,ResponseLeft@"编辑"+WindowLeft,ResponseTop@"编辑"+ResponseHeight@"编辑"+WindowTop,0,WindowHandle,0)
在“返回选项2”计算图标里输入以下代码:
LastMenuID:=mGetLastMenuID()
Checked@"编辑":=FALSE
(6)在“打开编辑框1”计算图标里输入以下代码:
Message:=""
newText:=EditboxDisplay("请在这里编辑新的菜单项然后单击按钮",200,50,50,100)
在“打开编辑框2”计算图标里输入以下代码:
Message:=""
newText:=EditboxDisplay("请在这里编辑新的菜单项然后单击按钮",200,50,50,100)
在“确定”计算图标里输入以下代码:
newText:=EditboxGetText() --取得编辑结果
mModifyMenu(EditMenu,33,0,33,newText) --改变菜单项
EditboxErase() --删除编辑框
LastMenuID:=-1
Message:="此项菜单已经改变,请查看"
在“添加菜单项”计算图标中输入以下代码:
newText:=EditboxGetText() --取得编辑结果
mAppendMenu(EditMenu,0,appendMenuID,newText) --添加一个新的菜单项
appendMenuID:=appendMenuID+1 --下一个添加菜单的ID号
EditboxErase() --删除编辑框
LastMenuID:=-1
Message:="已经增加了一个新的菜单项,请查看"
“擦除按钮1”和“擦除按钮2”分别擦除两个“提交”按钮。
(7)在“改变选中标记”计算图标里输入以下代码:
mCheckMenuItem(EditMenu,33,8-mGetMenuState(EditMenu,33,8))
Message:="试验菜单项的选中标记已经改变,请查看"
在“改变可用性”计算图标里输入以下代码:
mEnableMenuItem(EditMenu,33,9-mGetMenuState(EditMenu,33,9))
Message:="试验菜单项的可用性已经改变,请查看"
在“LastMenuID>-1”条件响应的下挂计算图标里输入以下代码:
ifLastMenuID=10thenMessage:="打开"
ifLastMenuID=20thenMessage:="保存为*.txt文件"
ifLastMenuID=21thenMessage:="保存为*.doc文件"
ifLastMenuID=22thenMessage:="保存为*.rtf文件"
ifLastMenuID=23thenMessage:="保存为*.html文件"
ifLastMenuID=24thenMessage:="取消"
ifLastMenuID=30thenMessage:="复制"
ifLastMenuID=31thenMessage:="剪切"
ifLastMenuID=32thenMessage:="粘贴"
ifLastMenuID=33thenMessage:="测试项"
Message:="你选择的菜单项是:"^MessageifLastMenuID=0thenMessage:="没有选择菜单"
ifLastMenuID=11then --退出
mMenuHookOff() --解除与Authorware的挂钩
mDestroyMenu(SelectMenu) --删除各个菜单
mDestroyMenu(EditMenu)
mDestroyMenu(submenu)
Quit()
endif
LastMenuID:=-1其中条件响应的“自动”选项选择“由假变真”。
在“CtrlC”计算图标中输入以下代码:
LastMenuID:=30
在“CtrlO”计算图标中输入以下代码:
LastMenuID:=10
在“CtrlQ”计算图标中输入以下代码:
LastMenuID:=11
(8)由于Budmenu.u32不能直接建立菜单条,因此,本例中是使用两个按钮(文件、编辑)来模拟菜单条,故需要使用按钮编辑器把两个按钮的边框去除,并将其调整至合适的位置。整个程序运行时的效果如图13-17所示。图13-17
13.2.3动态改变按钮名称
在程序运行过程中,有的按钮需要动态改变其名称。比如,制作一个媒体播放器,我们可把“播放”和“暂停”做成一个按钮:当点击“播放”后,该按钮变成“暂停”;再点击一次“暂停”,该按钮又会变成“播放”。
1.程序设计
通过系统函数设置按钮名称,从而达到动态改变按钮名称的目的。
2.核心技术
使用系统函数SetIconTitle()来改变按钮名称。
3.典型函数用法介绍
↘SetIconTitle()函数
格式:SetIconTitle(IconID@“IconTitle”,“title”)
说明:该函数用于设置指定图标的标题名称。
参数:IconTitle,指定图标的标题;
title,设置新的标题名称。
↘IconID()函数
格式:number:=IconID(“IconTitle”)
说明:该函数用于返回指定图标独一无二的数字标识。
参数:IconTitle,指定图标的标题。
↘IconTitle()函数
格式:string:=IconTitle(IconID)
说明:该函数用于返回用户在IconID中指定的图标标题。
4.具体制作
(1)制作如图13-18所示的程序流程。
(2)在“初始化”计算图标中输入以下代码:
ResizeWindow(210,152)
id1:=IconID@"暂停"
id2:=IconID@"开仓"
在“暂停”按钮的下挂计算图标中输入以下代码:
ifIconTitle="暂停"then
SetIconTitle(id1,"播放")
else
SetIconTitle(id1,"暂停")
endif在“开仓”按钮的下挂计算图标中输入以下代码:
ifIconTitle="关仓"then
SetIconTitle(id2,"开仓")
else
SetIconTitle(id2,"关仓")
endif
在“退出”按钮的下挂计算图标中输入以下代码:
SetIconTitle(id1,"暂停")
SetIconTitle(id2,"开仓")
Quit()
(3)双击交互图标,在其演示窗口中输入文字,如图13-19所示。
(4)至此,用户可以试着运行一下程序,体验一下动态改变按钮名称的感觉。
实际上,要动态改变按钮名称,也可使两个按钮重合(当然也可多个),然后在某一时刻只显示某一个按钮,其它按钮隐藏。
13.2.4调用Windows的常用对话框
1.程序设计
本例通过控件的调用,实现打开颜色对话框、字体对话框、打印对话框、文件对话框和保存文件对话框的功能,并能同时返回每个对话框的结果。
2.核心技术
本例各个功能得以实现,依赖于MicrosoftCommonDialogControl控件。
3.控件典型属性介绍
CancelError,是否显示出错信息,其值为True或False。
DefaultExt,缺省的扩展名。
DialogTitle,对话框标题。
FileName,选择的文件名。
Filter,列表框的过滤器设置。
FilterInder,过滤器索引值。
Flags,标志位。该标志位在不同对话框里,同样的值有不同的含义。具体内容可参见表13-1。表13-1不同对话框里Flags的含义FontBold,选择的字体是否是粗体,其值为True或False。
FontItalic,选择的字体是否是斜体,其值为True或False。
FontName,选择的字体的名称。
FontSize,选择的字体的大小。
FontStrikeThru,选择的字体是否有删除线,其值为True或False。
FontUnderLine,选择的字体是否有下划线,其值为True或False。
FromPage,返回“打印”对话框里的开始页数值。
HelpCommand,返回或设置需要的联机帮助的类型。
HelpContext,返回或设置联机帮助的内容。
HelpFile,联机帮助文件的路径及名称。
HelpKey,返回或设置联机帮助的主题关键字。
InitDir,初始文件夹。
Max,字体的最大值。
MaxFilenSize,文件名的最大字节数。
Min,字体的最小值。
Orientation,打印方向。值为1表示纵向,值为2表示横向。
PrinterDefault,是否使用缺省打印机,其值为True或False。
ToPage,返回“打印”对话框里的结束页数值。
4.控件典型方法介绍
ShowColor,显示“颜色”对话框。
ShowFont,显示“字体”对话框。在显示该对话框之前,必须先设置前面所介绍的Flags属性,否则系统会出错。
ShowOpen,显示“打开”对话框。
ShowPrinter,显示“打印”对话框。
ShowSave,显示“另存为”对话框。
5.具体制作
(1)制作如图13-20所示的程序流程(其中还有一个“退出”按钮没有显示出来)。图13-20
(2)在“初值”计算图标里输入以下代码:
ResizeWindow(350,250)
d:=""
(3)在“显示信息”显示图标里输入以下代码:
{d}
(4)在“颜色对话框”按钮的下挂计算图标里输入以下代码:
a:=SetSpriteProperty(@"通用对话框控件",#flags,2)
a:=CallSprite(@"通用对话框控件",#showcolor)
a:=GetSpriteProperty(@"通用对话框控件",#color)
b:=SetFileProperty(#awbackgroundcolor,a)
d:="背景色="^String(a)
(5)在“字体对话框”按钮的下挂计算图标里输入以下代码:
a:=SetSpriteProperty(@"通用对话框控件",#Flags,3)
a:=CallSprite(@"通用对话框控件",#ShowFont)
d1:=GetSpriteProperty(@"通用对话框控件",#FontName)
d2:=GetSpriteProperty(@"通用对话框控件",#FontSize)
d3:=Test(GetSpriteProperty(@"通用对话框控件",#FontBold),"粗体","")
d4:=Test(GetSpriteProperty(@"通用对话框控件",#FontItalic),"斜体","")
d5:=Test(GetSpriteProperty(@"通用对话框控件",#FontUnderLine),"下划线","")
d:="字体="^d1^"\r字号="^d2^"\r"^d3^d4^d5
(6)在“打开文件对话框”按钮的下挂计算图标里输入以下代码:
a:=CallSprite(@"通用对话框控件",#ShowOpen)
d:="打开文件="^GetSpriteProperty(@"通用对话框控件",#FileName)
(7)在“保存文件对话框”按钮的下挂计算图标里输入以下代码:
a:=SetSpriteProperty(@"通用对话框控件",#Flags,2)
a:=CallSprite(@"通用对话框控件",#ShowSave)
d:="保存文件="^GetSpriteProperty(@"通用对话框控件",#FileName)
(8)在“打印对话框”按钮的下挂计算图标里输入以下代码:
a:=CallSprite(@"通用对话框控件",#ShowPrinter)
d:="调用了打印文件对话框,正常返回"(9)打包程序,运行结果如图13-21所示。图13-2113.3在Authorware中连接数据库
13.3.1ODBC驱动程序连接数据库简介
ODBC(OpenDataBaseConnectivity)接口,中文名为“开放式数据库链接”接口,是Microsoft公司推出的实现异种数据库互连的标准。它对用户屏蔽了不同数据库之间的差异,从而可以使用户利用标准的SQL语言对各种不同的数据库进行操作。
Authorware提供了一个支持标准ODBC的数据库接口,利用标准的SQL语言可以对Access、FoxPro、Dbase、Oracle、Sybase、SQLServer等数据库进行添加、删除和查询等基本操作。
在Authorware中操作数据库,必须具备以下条件:
(1)所连接数据库的ODBC驱动程序。
(2)ODBC用户代码文件,即需要调用外部的UCD函数(ODBC.U32)。
(3)数据库源文件,一般由数据库软件创建,也可以利用Authorware新建和添加记录。
ODBC驱动程序是一种动态的链接库,它含有可与各种不同数据库相链接的函数,每种数据库类型都有单独的驱动程序。在WindowsXP操作系统中,我们可在“控制面板”里打开“管理工具”,然后打开“数据源(ODBC)”即可查看系统中的ODBC驱动程序,如图13-22所示。图13-22用户使用的每个ODBC驱动程序都必须包含以下基本功能:
(1)提供数据库的链接;
(2)准备和执行SQL语句;
(3)处理事务的功能;
(4)返回结果集;
(5)通知应用程序的错误信息。
13.3.2配置ODBC数据源
在Authorware中正常使用数据库需要两个最基本的条件:
(1)系统中的ODBC驱动程序必须可用,其作用是用来连接一种数据库;
(2)必须建立ODBC数据源,其作用是用来连接一种特殊类型的数据库的ODBC驱动程序配置。
配置ODBC的方法一般有两种,即手动配置和自动配置。
1.手动配置
利用Windows的控制面板中的ODBC管理应用程序可实现手动配置ODBC数据源。
(1)在WindowsXP中,我们可以打开“控制面板”,再打开其中的“管理工具”,在其中找到“数据源(ODBC)”图标,双击它打开ODBC数据源管理器,然后切换至“系统DSN”标签,如图13-23所示。图13-23
(2)单击“添加”按钮,打开“创建新数据源”对话框,如图13-24所示。在其中选择自己需要的驱动程序,在此,我们选择“MicrosoftAccessDriver(*.mdb)”,表示将连接一个Access数据库。单击“完成”按钮进入下一个环节。图13-24
(3)在“ODBCMicrosoftAccess安装”对话框中,输入一个“数据源名”,在此输入“student”,“说明”可以不输入。在下面的“数据库”里,单击“选择”按钮,选择自己的Access数据库,如图13-25所示。如果该数据库包含有密码等相关信息,则可单击“高级”按钮,然后在其中设置密码等,如图13-26所示。图13-25图13-26
(4)设置好数据源后,在“系统DSN”中即可看到我们设置的系统数据源,如图13-27所示。图13-27
2.自动配置
在Authorware中调用tMsSDSN.U32函数可实现ODBC数据源的自动配置。
自动配置数据源的优点在于,通过Authorware编制的程序,打包成可执行文件后,可以在其他计算机上直接运行,而不需要手动去配置数据源。实现自动配置数据源的关键是使用外部函数tMsDSN.u32中的tMsDBRegister()函数。
(外部函数tMsDSN.u32
格式:result:=tMsDBRegister(dbReqType,dbType,dbList)说明:该函数用于配置数据源的驱动程序、指定数据源的名称、指定源数据库。
参数:dbReqTpye,指定对数据源的操作方式:
●dbReqTpye=1,表示增加ODBC数据源;
●dbReqTpye=2,表示配置(编辑)ODBC数据源;
●dbReqTpye=3,表示删除ODBC数据源;
●dbReqTpye=4,表示增加ODBC系统数据源;
●dbReqTpye=5,表示配置(编辑)ODBC系统数据源;
●dbReqTpye=6,表示删除ODBC系统数据源;
●dbReqTpye=7,表示删除默认的ODBC数据源。
dbType,指定ODBC数据源需要使用的驱动程序。比如:
dbType:="MicrosoftAccessDriver(*.mdb)"
dbList,指定ODBC数据源的名称、对数据源的描述以及与之相关联的数据库文件,注意它们之间必须用分号隔开,下面举例说明:
dbList:="DSN=CollegeDSN;" --CollegeDSN为数据源的名称
dbList:=dbList^"Description=MyODBCDSN;"--对CollegeDSN数据源进行描述
dbList:=dbList^"FIL=MSAccess;" --说明数据的类型为Access数据库
dbList:=dbList^"DBQ="^FileLocation^"test.mdb;" --相关联的数据库是test.mdb
返回值:如果数据源创建成功,则返回值是1,否则返回0。
自动创建好数据源后,用户还可以通过控制面板中的“数据源(ODBC)”来查看创建的结果。13.3.3SQL语句使
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026上海复旦大学国家智能评价与治理实验基地赵星课题组招聘博士后2人考试参考试题及答案解析
- 2026北京市延庆区教育委员会第一批招聘教师60人考试参考试题及答案解析
- 2026山东青岛水务集团有限公司招聘1人考试备考试题及答案解析
- 2026四川内江市隆昌市普润镇中心学校招聘2人考试备考试题及答案解析
- 2026广西农业科学院甘蔗研究所甘蔗绿色高效栽培技术团队招聘编制外工作人员1人考试参考试题及答案解析
- 2026年甘肃省金昌市机关事务管理局补招临聘驾驶员笔试参考题库及答案解析
- 2025浙江省旅游投资集团招聘25人(第八批)考试备考试题及答案解析
- 2026广东中山大学附属第一医院精准医学研究院消化系统肿瘤研究团队专职科研人员招聘2人考试参考题库及答案解析
- 2026广东深圳市福田区黄埔雅苑幼儿园招聘教职员工1人考试参考题库及答案解析
- 2026年合肥共达职业技术学院专任教师公开招聘12名考试备考试题及答案解析
- DL-T5796-2019水电工程边坡安全监测技术规范
- 股权转让协议书常电子版(2篇)
- 2023年副主任医师(副高)-推拿学(副高)考试历年高频考点真题演练附带含答案
- 产品质量法课件
- FZ/T 82006-2018机织配饰品
- 《食品包装学(第三版)》教学PPT课件整套电子讲义
- plc电机正反转-教案
- 燃机三菱控制系统简述课件
- 全尺寸测量报告FAI
- 稽核管理培训课件
- 临时电箱日常巡查记录表
评论
0/150
提交评论