·汉化新世纪 ·汉化新世纪论坛 ·百家争鸣 ·论坛集萃 ·汉化问答 ·软件介绍
文章首页 >> 汉化教学 >> 工具使用 >> 在NSIS中如何禁止一个组件组的父项的点击事件    Creative Commons License,创作共用协议(中文版)  署名 非商业性使用 禁止演绎

在NSIS中如何禁止一个组件组的父项的点击事件

作者: RESTOOLS 来源:RESTOOLS 时间:2006-08-06 点击:10804


如上图,当我们需要别人只能点选“原始英文版”或“简体中文版”中的其中一项时,我们通常会用到 !insertmacro StartRadioButtons 这类的宏来控制单选,但是在 NSIS 的例子中,它们的操控都是在父项的情况下实行的,当我们在子项的环境中实现时,问题出现了,当我们为用户设想时,如果用户点选了父项“界面语言”,会造成子项选择丢失或者反选,这就跟我们原来设想的单选意图完全背道而驰了,那么我们究竟要怎么做才能禁止用户的这种错误操作呢。
而在整个 NSIS 文档中,我们并不能找到任何一个命令或参数来禁止一个 SectionGroup 的项目的可选性,也就是无论如何也没办法禁止用户错误操作了吗?
大家不要忘记了 NSIS 曾经给我们的提示,
引用内容 引用内容
SectionSetFlags
区段索引 区段标记设置区段标记。标记为 32 位整数。第一位(低位)代表该区段当前是否选中,第二位代表该区段是否是一个区段组(请不要修改这里除非你真的很了解),第三位代表该区段是否是一个区段组的结尾(同样,请不要修改),第四位代表该区段文字是否描黑显示,第五位代表该区段是否是只读,第六位代表区段组是否自动展开,第七位代表区段组是部分选定的,第八位是部分选定区段组切换内部使用,第九位是用来反映区段名称更改。如果指定了超出范围的区段则会放置一个错误的标记。

虽然 NSIS 一再强调,不要修改除非你真的很了解,不过既然我已经了解了,当然就会随便乱动了。
引用来自  Untitled01,2006-8-5 22:06:42 引用来自 Untitled01,2006-8-5 22:06:42
!include "MUI.nsh"
!include "UsefulLib.nsh"

OutFile "Setup.exe"

; 组件选择页面
!define MUI_COMPONENTSPAGE_NODESC
!define MUI_COMPONENTSPAGE_TEXT_TOP " "
ComponentText "" "选择游戏安装的版本:" "----------------------"
!insertmacro MUI_PAGE_COMPONENTS

Section "!主要程序" SEC01
SectionEnd

SubSection
"界面语言" SEC0A
  Section /o "原始英文版" SEC11
  SectionEnd
  Section
"简体中文版" SEC12
  SectionEnd
SubSectionEnd

SubSection
"存档文件" SEC0B
  Section /o "全英文球员名(锁定)" SEC21
  SectionEnd
  Section
/o "全英文球员名(解锁)" SEC22
  SectionEnd
  Section
"中日韩球员中文名(锁定)" SEC23
  SectionEnd
  Section
/o "中日韩球员中文名(解锁)" SEC24
  SectionEnd
SubSectionEnd

SubSection
"解说版本" SEC0C
  Section /o "英语解说" SEC31
  SectionEnd
  Section
"中文解说" SEC32
  SectionEnd
  Section
/o "日语解说" SEC33
  SectionEnd
SubSectionEnd
; ------ 游戏组件选择界面结束 ------

; 区段组件描述

Function .onInit
SectionGetFlags "${SEC0A}" $R0                 #  <======= 添加,取原父项的标志值
IntOp $R0 $R0 + 15                             #  <======= 添加,加上 15,就会令父项变成只读
SectionSetFlags "${SEC0A}" $R0                 #  <======= 添加
SectionGetFlags "${SEC0B}" $R0                 #  <======= 添加
IntOp $R0 $R0 + 15                             #  <======= 添加
SectionSetFlags "${SEC0B}" $R0                 #  <======= 添加
SectionGetFlags "${SEC0C}" $R0                 #  <======= 添加
IntOp $R0 $R0 + 15                             #  <======= 添加
SectionSetFlags "${SEC0C}" $R0                 #  <======= 添加
SectionSetFlags ${SEC12} ${SF_SelectED}        #  <======= 添加,设置选中状态
SectionSetFlags ${SEC23} ${SF_SelectED}        #  <======= 添加
SectionSetFlags ${SEC32} ${SF_SelectED}        #  <======= 添加
StrCpy $1 ${SEC12} ; SEC12默认选中             #  <======= 添加,
#####必须在 $1 中写入当前选中的项,因为在 .onSelChange 中是用来记录第一组的选中项目
StrCpy $2 ${SEC23} ; SEC23默认选中             #  <======= 添加
StrCpy $3 ${SEC32} ; SEC32默认选中             #  <======= 添加
FunctionEnd

;单选
Function .onSelChange
!insertmacro StartRadioButtons $1
!insertmacro RadioButton ${SEC11}
!insertmacro RadioButton ${SEC12}
!insertmacro EndRadioButtons
!insertmacro StartRadioButtons $2
!insertmacro RadioButton ${SEC21}
!insertmacro RadioButton ${SEC22}
!insertmacro RadioButton ${SEC23}
!insertmacro RadioButton ${SEC24}
!insertmacro EndRadioButtons
!insertmacro StartRadioButtons $3
!insertmacro RadioButton ${SEC31}
!insertmacro RadioButton ${SEC32}
!insertmacro RadioButton ${SEC33}
!insertmacro EndRadioButtons
FunctionEnd


汉化新世纪 责任编辑: 乾 .:|:. 标签(Tag): NSIS 组件 脚本

·上一篇: NSIS 常用小问题合集(论坛收集) #3 ·下一篇: 关于 NSIS 写入注册表的问题, REG_MULTI_SZ 类型

· 版权申明: 本文引自《RESTOOLS》,如有版权疑问请及时联系本站,以便本站处理。

· 转载申明: 本文引自《RESTOOLS》[ 作者: RESTOOLS],如需转载请直接联系原始作者,并请注明原始出处。

相关文章                                                                                发表评论 打印此文 关闭窗口

| 设为首页 | 加入收藏 | 联系我们 | 友情链接
Creative Commons License,创作共用协议(中文版)  署名 非商业性使用 禁止演绎
本站内容,除转载或版权特别申明的内容外,皆遵守 创造共用协议中文版之“署名-非商业性使用-禁止演绎 2.5 中国大陆”条款
This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 2.5 China License.
本网站内容源自汉化新世纪论坛的摘录和汉化新世纪成员的原创文章。
凡汉化新世纪论坛的文字皆默认为汉化新世纪与原作者共同拥有并授权发布。
如对本站发布文章有所异议请来信告知,我们将及时删除。
凡商业摘录本站文字请先与我们联系,本站将保留非授权商业发布的追究权利。
凡非商业摘录本站文字请明显注明出处和原作者,并不得改动,凡改动必先征求原作者同意。
苏ICP备05002283号