|
主题: 关于“改变屏幕刷新率”一帖的一点疑问
|
阿州
职务:普通成员
等级:2
金币:10.0
发贴:447
|
#12002/8/23 13:44:54
引用:
给你转篇文章,来自AW爱好者论坛的schzh 分辨率设置的详细介绍 因为不能要求用户保持跟我们一样的分辨率,这就会导致我们的画面或者不能全部显示,或者只能在屏幕上占一小块,只有保持始终全屏才是最美观的。方法有二: 1、设为全屏,然后动态更改每一个显示为屏幕大小,这样烦琐而且耗时,导致程序运行慢; 2、在程序起始记录分辨率,更改用户分辨率为设定值,程序结束自动恢复原设置,这种方法我认为最可行。
方法2大部分问题前面已讨论过,还需要解决以下问题: 1、分辨率的四个参数中,screenwidth,screenheight,screendepth为 Authorware变量,直接记录即可,但刷新频率没有,而且1024x768x32x85被更改为800x600x32时刷新频率被更改为60Hz,必须要改回,若用函数强行设为85,一是与原来不符,二是有些显示器根本达不到,可能就失败了; 2、初始时如果用户分辨率不能达到要求设置,则设置失败,应该给用户一个交代:“你的显示器太老了,没法用,画面不能全部显示或颜色特别难看不要赖我哦!花钱换个吧!”,对不对? 3、必须拦截Alt+F4,否则最后的恢复程序不能执行,不能恢复用户界面,人家会说:“水平太。。。。。。”
解决问题可以用BUDKEY,老张的函数,但都要钱,所以我选用alTools2.0, 完全免费。
我的解决方案如下: 1、用alGetDispSet()检测该机器可能否设置为你的要求(必要时可降低色位和频率),若不能,则提示。。。。。。; 2、起始记录width=screenwidth,height=screenheight,depth=screendepth,至于刷新频率则用alGetCurrentDispSet(),如结果为"1024x768x32x85",则记录frequent=85,字符串的解析大家都会吧;
(刚才有问字符串解析的事,不好意思,我原以为大家都知道的,因为我第一天就先学的这个,现在看来还有必要说说:
result1 := alGetCurrentDispSet() ;获得当前设置 number1 := Rfind("x", result1) ;找到最后一个x number2 := CharCount(result1) ;字符串长度 frequent := SubStr(result1,number1+1,number2) ;获得分辨率,最后一个x直至结尾)
3、用alChangeRes(宽,高,色,频率) 设置屏幕为你的值; 4、用alHideTaskBar()隐藏任务栏; 5、用InstallAPWKeys()拦截Alt+F4,InstallAPWKeys为ApwKeys.u32的函数; 6、主程序; 7、alChangeRes(width,height,depth,frequent)恢复分辨率; 8、RemoveAPWKeys()恢复Alt键功能; 9、alShowTaskBar()显示任务栏;
有没有什么函数能列出显示器刷新率的列表,这样动态设置屏幕的刷新率启不更好。 上贴的漏洞在于,如果客户机当前的刷新率是80(在800X600下,刷新率最高为80),记录在案后,开始自己的“3、用alChangeRes(宽,高,色,频率) 设置屏幕为你的值;” 这是我要是设置为85,而客户机不支持也是做无用功阿,这段程序的意义就不存在了 所以能不能列出系统个分辨率下的刷新制?
编辑历史:[这消息被冷血编辑过(编辑时间2002-08-23 13:45:56)]
|
阿州
职务:普通成员
等级:2
金币:10.0
发贴:447
|
#22002/8/23 14:31:58
找到方法了,老张函数里面有 名称 M_GetAllDisplayModes() 格式 Result:=M_GetAllDisplayModes() 功能 列出系统支持的所有可用的屏幕分辨率。 返回值 分辨率列表。格式为:"Width*Height,ColorDepth,Refresh",换行符号分隔。 参数 无。 范例 M_GetAllDisplayModes.zip 注意 -
编辑历史:[这消息被冷血编辑过(编辑时间2002-08-23 14:32:20)]
|
魔岩
职务:版主
等级:6
金币:34.0
发贴:4453
|
#32002/8/23 14:48:39
altools.u32 的2.0 版本可以取得屏幕分辨率啊。。老张的函数要钱的啊。。呵呵
|
阿州
职务:普通成员
等级:2
金币:10.0
发贴:447
|
#42002/8/23 15:08:56
没办法,我已经掏腰包了,老张里面的很多函数确实不错~
上面那个函数还可以列出不同分辨率下的Refresh(刷新率),这样就周全多了
altools 2。0版哪里有下载? 我手头的里面没有那个取得当前刷新率的函数,Rock给弄一个把~ 谢谢了~
|
阿州
职务:普通成员
等级:2
金币:10.0
发贴:447
|
#52002/8/23 16:18:45
ApwKeys.u32 支持32位的系统吗? 也就是说在2000里面能用吗?
|
阿州
职务:普通成员
等级:2
金币:10.0
发贴:447
|
#62002/8/23 16:22:49
刚才试错了,2000里面能用
他都能拦截哪些系统健? 那个函数里面连个说明也没有~
|
与人同乐
职务:管理员
等级:6
金币:18.0
发贴:3928
|
#72002/8/24 17:09:55
win键,Alt+F4,Alt+Tab,CTRL+ALT+DEL
|
魔岩
职务:版主
等级:6
金币:34.0
发贴:4453
|
#82002/8/24 19:12:38
编辑历史:[这消息被Rock编辑过(编辑时间2002-08-24 19:14:05)]
|
阿州
职务:普通成员
等级:2
金币:10.0
发贴:447
|
#92002/8/25 11:23:27
Y在上个帖子中说 引用: win键,Alt+F4,Alt+Tab,CTRL+ALT+DEL
根据前面的帖子, 引用:
apwkeys中的外部函数说明(小邓)转自http://dengchunzhi.home.chinaren.com/u32.htm 该U32使AW可以识别Windows的一些特殊键,如Alt,Ctrl等。
InstallAPWKeys
语法:InstallAPWKeys()
说明:使用了InstallAPWKeys()这个函数之后,就可以在AW应用程序中控制这些键,具体如下:
Alt------"AltF16"
Shift-----"ShiftF16"
Ctrl-------"CtrlF16"
Caps Lock------"F15"
Num Lock-------"F14"
Scorll Lock------"F13"
RemoveAPWKeys
语法:RemoveAPWKeys()
说明:使用了InstallAPWKeys()这个函数之后,必须使用RemoveAPWKeys()函数将按键还原。
他的意思就是说改变了上述按键的原始定义,赋予了他新的含义,那么原来的系统组合健也因为这些案件定义的修改而失效,对不? (谢谢Rock的2.0!)
编辑历史:[这消息被冷血编辑过(编辑时间2002-08-25 11:24:23)]
|
与人同乐
职务:管理员
等级:6
金币:18.0
发贴:3928
|
#102002/8/25 16:35:01
是这样。
|
没有注册
职务:普通成员
等级:1
金币:0.0
发贴:10
|
#112002/9/11 1:04:54
用上面的方法如果程序运行过程中死机,强行退出本程序,其结果是要用手工将计算机的分辨率还原,不知道是不是这样??
|
魔岩
职务:版主
等级:6
金币:34.0
发贴:4453
|
#122002/9/11 3:42:01
没有注册在上个帖子中说 引用: 用上面的方法如果程序运行过程中死机,强行退出本程序,其结果是要用手工将计算机的分辨率还原,不知道是不是这样??
是这样的。。
|