主题:  【Authorware√常见问题】

魔岩

职务:版主
等级:6
金币:34.0
发贴:4453
注册:2004/1/13 10:53:31
#312002/8/5 8:50:13
[问题] aw 中如何判断某文件夹下文件的个数?

[解答] (Rock Studio 魔岩工作室)

下面这段脚本公式是取得当前文件夹目录下的文件个数:
FileString:=Catalog(FileLocation,"F")
FileNumber:=LineCount(FileString,Return)



魔岩

职务:版主
等级:6
金币:34.0
发贴:4453
注册:2004/1/13 10:53:31
#322002/8/5 9:28:46
[问题] aw中如何动态的判断某文件夹下文件的格式,并使之的值返回到一组字符串中?

[解答] (Rock Studio 魔岩工作室、AW5 、虚竹)

--取得文件列表
FileString:=Catalog(FileLocation,"F")
--取得文件个数
FileNumber:=LineCount(FileString,Return)
--初始化文件后缀名记录字符串
FileFixs:=""

--取得总的文件后缀名
repeat with i:=1 to FileNumber
FileNames:=GetLine(FileString,i)
lastindex:=CharCount(FileNames)
FileFix:=SubStr(FileNames,RFind(".",FileNames)+1,CharCount(FileNames))
FileFixs:=FileFixs^FileFix^Return
end repeat

--筛选后缀名
FixsNumber:=LineCount(FileFixs)
repeat with k:=0 to FixsNumber
str:=LowerCase(GetLine(FileFixs,k))
str3:=str3^str
str1:=LowerCase(GetLine(FileFixs,k+1))
if Find(str1,str3)=0 then
fixs:=fixs^str1^Return
end if
end repeat

范例下载:
 判断文件后缀名8K

编辑历史:[这消息被Rock编辑过(编辑时间2002-08-05 10:40:27)]
[这消息被Rock编辑过(编辑时间2002-08-05 23:10:17)]


魔岩

职务:版主
等级:6
金币:34.0
发贴:4453
注册:2004/1/13 10:53:31
#332002/8/5 9:37:32
[问题] 限定程序使用次数的脚本语言

[解答] (虚竹)

--以下脚本语句无需改动,立即可用,呵呵!希望对大家有用
--times是自定义变量,记录程序使用的次数
--times.txt是外部记录文件
if FileType (RecordsLocation^"times.txt")=0 then
WriteExtFile(RecordsLocation^"times.txt","1")
MessageBox(WindowHandle,"您是第一次使用本软件","提醒" ,49)
else
times:=ReadExtFile(RecordsLocation^"times.txt")
if times>3 then
MessageBox(WindowHandle,"使用次数已满,您不能再使用本软件","提醒" ,49)
Quit()
else
MessageBox(WindowHandle,"您还可以使用本软件的次数是" ^3-times,"提醒" ,49)
WriteExtFile(RecordsLocation^"times.txt",times+1)
end if
end if

--你复制到一个新的文件试试,马上搞定,呵呵!!
--当然你可以把这个记录文件藏的更好一点!



魔岩

职务:版主
等级:6
金币:34.0
发贴:4453
注册:2004/1/13 10:53:31
#342002/8/6 10:48:16
[问题]
请问,要是这样的一种矩阵如何编程:
1,2,3,4选三个数的组合(不重复):
1,2,3
1,3,4
2,1,3
2,3,4


[解答一](Rock Studio 魔岩工作室)

相关脚本:

--默认数列 ,可自己删除增加数列值
DefaultList:=[1,2,3,4,5]
--临时数列
CurrentList:=DefaultList
--随机数个数 ,可自己更改,必须不大于数列最大索引号
GetNumCount:=3
--输出结果字符串,格式为:#,#,#(以逗号分隔)
RandomNumber:=""

--取得不重复随机数
repeat with i:=1 to GetNumCount
RandomIndex:=Random(1,ListCount(CurrentList),1)
if iRandomNumber:=RandomNumber^CurrentList[RandomIndex]^","
else
RandomNumber:=RandomNumber^CurrentList[RandomIndex]
end if
DeleteAtIndex(CurrentList,RandomIndex)
end repeat


范例下载:
 随机不重复取数7K


[解答二] [yufeng 小邓]
yufeng小邓的算法:
这些排列问题,如果要列出所有的可能,最好就不用随机来实现了,因为其中浪费了极大的取数时间.
下面给出从i个数中取3个数的组合的方法,假定这i个数保存在Deflist[]中且各不相同而把取出的数保存在CurList[]中
Deflist:=[1,2,3,4,5,6,7,8,9]
Curlist:=[]
p:=1
repeat with a:=1 to i-2
CurList[p][1]:=deflist[a]
repeat with b:=2 to i-1
CurList[p][2]:=defList[b]
repeat with c:=3 to i-1
CurList[p][3]:=defList[c]
end repeat
end repeat
end repeat

编辑历史:[这消息被Rock编辑过(编辑时间2002-08-06 14:33:59)]


魔岩

职务:版主
等级:6
金币:34.0
发贴:4453
注册:2004/1/13 10:53:31
#352002/8/24 0:21:30
[问题]如何实现文件夹下的文件拷贝(包括子文件夹下的文件)?

[解答] (魔岩工作室 Rock Studio)
budapi.u32有类似的函数实现文件+文件夹的拷贝功能:
Result := baXCopy( SrcDir, DestDir, FileSpec, Overwrite, MakeDirs )

Copies all files matching FileSpec from SrcDir to DestDir, including sub-directories.Overwrite can be 'Always', 'IfNewer', 'IfNotExist'.Is MakeDirs is true, empty directories will be created.Returns 0 if successful.

例如以下代码演示拷贝当前目录下的所有文件到c:\a目录下:
baXCopy(FileLocation,"c:\\a","*.*","Always",TRUE)

编辑历史:[这消息被Rock编辑过(编辑时间2002-09-28 00:42:26)]


魔岩

职务:版主
等级:6
金币:34.0
发贴:4453
注册:2004/1/13 10:53:31
#362002/8/28 20:14:27
[问题] 如何将时钟日期改成中文形式出现

[解答](网友kiwi)
其实这可用一个很简单的方法来实现,具体如下:
计算图标中输入:
months := ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"]
days := [#Sunday:"星期日", #Monday:"星期一", #Tuesday:"星期二", #Wednesday:"星期三", #Thursday:"星期四", #Friday:"星期五", #Saturday:"星期六"]
显示图标:
{days[Symbol(DayName)]} {months[Month]}
这样就可以显示中文 星期几 和月份



魔岩

职务:版主
等级:6
金币:34.0
发贴:4453
注册:2004/1/13 10:53:31
#372002/8/29 9:37:52
[问题]如何把引入的WEB内容的滑条去掉?

[解答] (余风冷血)
在网页中加入以下代码即可:
<body style=overflowcroll;overflow-y:hidden;overflow-x:hidden>



魔岩

职务:版主
等级:6
金币:34.0
发贴:4453
注册:2004/1/13 10:53:31
#382002/8/29 10:55:53
[问题]避免程序被多次同时执行的方案

[解答]
避免重复执行的脚本:
在程序流程开始处放置一计算图标并写入一下代码:

方法一:
在程序流程最开始处添加计算脚本(假设程序标题为“魔岩工作室”):
Result:=FindWindow("APWMainClass","魔岩工作室")
if Result<>0 then Quit(0)
SetWindowText(WindowHandle,"魔岩工作室")


方法二:(网友kwwx)

利用budapi中的bawindowlist函数。
返回值为目前运行的所有符合要求的程序的句柄,每个句柄之间用换行符分开。如果返回值多于一行,既意味着发现了一个以上的程序实例在运行,当前程序便退出。
在程序中写:
win_list:=bawindowList("APWMainClass","yourname")
if LineCount(win_list)>1 then
Quit(0)
end if



魔岩

职务:版主
等级:6
金币:34.0
发贴:4453
注册:2004/1/13 10:53:31
#392002/8/29 11:46:36
AUTHORWARE中调用网页文件的几种方法
--------------------------------------------------------------------------------
作者:echo88 来源:AwFans论坛 类别:经验心得 日期:2002.08.24 今日/总浏览: 7/29


1 使用控件,此法请参考以前的帖子。
2 使用WebXtra插件。
3 使用Budapi中的函数baOpenURL( URL , State ),要求你的Authorware文件夹中有Budapi.u32。使用时先导入函数baOpenURL().如:
baOpenURL( "hpage\\bus.htm", 1 )
4 使用OpenURL.x32。确保你的Xtas文件夹(或其子文件夹)中包含OpenURL.x32,不用导入函数,可以直接使用gsOpenURL( "http://www.cctv.com"; )来打开网页。
如:gsOpenURL( "hpage\\bus.htm" )
5 使用用JumpOutReturn(“程序名”,“文件的路径与文件名”)函数实现。
如:JumpOutReturn("",FileLocation^"hpage\\bus.htm")
JumpOutReturn("","www.cctv.com")

推荐使用方法4、5。openURL.x32是免费软件,可以自由使用;JumpOutReturn为系统函数。


作者: echo88
来源: AwFans论坛



魔岩

职务:版主
等级:6
金币:34.0
发贴:4453
注册:2004/1/13 10:53:31
#402002/9/13 14:54:37
[问题]如何检测ActiveX是否已经注册?

[解答](宇风 寒冰)
检测ActiveX控件文件是否存在可以使用FileType()
检测ActiveX控件是否注册可以使用ActiveXControlQuery("CLASSID"),如果没注册,使用ActiveXControlRegister("FILENAME")进行注册!



与人同乐

职务:管理员
等级:6
金币:18.0
发贴:3928
注册:2001/3/11 15:45:42
#412002/9/15 16:30:48
[问题]DMX中控制播放速率时,为什么函数seticonproperty(@"dmx",#rate,myrate)不起作用?
[解答](from Y)
seticonproperty函数在设计期间有效,用来对设计图标的属性进行预设置。在程序运行期间媒体播放时,要通过callsprite(@"dmx",#setrate,myrate)进行设置。

编辑历史:[这消息被Y编辑过(编辑时间2002-09-15 16:40:39)]


与人同乐

职务:管理员
等级:6
金币:18.0
发贴:3928
注册:2001/3/11 15:45:42
#422002/9/15 16:47:57
[问题]经常需要在显示设计图标中实时显示自定义变量的当前值,或在条件响应中判断外部函数的返回值(例如midiplaying())。如何实现自定义变量值或外部函数返回值的自动刷新?
[解答](from Y)
AW仅自动刷新系统即时型变量的值,如sec、minute、AltDown等等,外部函数或自定义变量的值AW是不查的。随时检测自定义变量值可以用带有即时型变量的表达式来代替,比如 myvar+sec-sec,这个表达式实际上是自定义变量myvar,但由于有了系统即时型变量sec,AW会自动刷新该表达式的值。因此这个式子可以用作条件响应或嵌入显示设计图标中并反映出实时更新。

编辑历史:[这消息被Y编辑过(编辑时间2002-09-15 16:52:05)]


与人同乐

职务:管理员
等级:6
金币:18.0
发贴:3928
注册:2001/3/11 15:45:42
#432002/9/15 20:32:15
[问题]某些使用AW5.X的同志经常会发现,在设计期间能够正常运行的程序打包后往往会出现这样那样的问题,尤其体现在QuickTime,Flash等Xtras的使用方面(排除系统中缺少相应驱动的情况):例如在运行时提示缺少Xtra而不能显示QuickTime Sprite Icon,或者不能通过CallSprite调用Xtras组件的方法,甚至根本不能播放swf。这种状况严重伤害了AW同志们对Flash、Quicktime等优秀工具的感情。这些问题是由某些Crack程序对runa5w32.exe的损害造成的,如果用Macromedia提供的限时试用版来打包自己的文件,就不会产生上述问题。(在打包时使用试用版的runa5w32.exe,也是可行的办法)

[解决](from Y)
首先安装5.1 45天试用版,然后在不进行任何Crack尝试的情况下于同一目录中安装5.2 Update patch(这两个软件包是Macromedia免费提供的),之后运行AW,可以发现时间限制被去除。但是请大家注意,这仍然是非商业版,会有Logo出现,而且在帮助文档中会缺少关于AW 5.2版新特性的内容(也没什么啦,不过是一些新增的知识模块、对强化后的代码编辑界面的说明)。不过对于大家学习AW而言,全功能而且没有时间限制的试用版已经足够了。



与人同乐

职务:管理员
等级:6
金币:18.0
发贴:3928
注册:2001/3/11 15:45:42
#442002/9/15 21:20:48
[问题]如何将调整用drawline画的线段的层数?
[解决](from Y)
SetLayer(layer),layer就是想要的层数。
或者
将运算设计图标附着在显示设计图标上,显示设计图标的层数就是画出线段的层数。



与人同乐

职务:管理员
等级:6
金币:18.0
发贴:3928
注册:2001/3/11 15:45:42
#452002/9/15 21:35:34
[问题]怎样实现按钮自动按下而不必再去点击它,使其下面的内容执行?
[解决](from Y)
为按钮定义一个热键比如F8,然后用presskey("F8")。