论坛风格切换切换到宽版
  • 1983阅读
  • 3回复

请教虎版一段INNO代码的写法问题 [复制链接]

上一主题 下一主题
离线axlswd
 

发帖
95
金钱
910
威望
91
只看楼主 倒序阅读 0 发表于: 2015-04-20

[Setup]
AppName=我的程序
AppVerName=我的程序 版本 1.5
DefaultDirName={pf}\我的程序
DefaultGroupName=我的程序
Compression=lzma

[code]
var
  restart: Boolean;

function InitializeSetup(): Boolean;
begin
Result := true;
    if MsgBox('你确认跳过欢迎界面吗?', mbConfirmation, MB_YESNO) = IDYES then
// restart:=true; //写法1
    restart:=false;//写法2
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
// if PageID=wpwelcome then Result:=restart;    //写法1
    if PageID=wpwelcome then Result:=not restart;//写法2
end;

如上述代码,想请教一下为什么我用第二种写法,无论如何都会跳过欢迎界面。我觉得逻辑方面应该效果一样的呀!
离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 1 发表于: 2015-04-21
你没有专门初始化变量 restart 。默认情况下,初始化时的值是 false。因此用 写法1 时,肯定回答时 restart  的值是 true,否定回答时值不变(即初始值 false)。而用 写法2  时,肯定回答时 restart  的值是 false,否定回答时值不变(即初始值 false),也就是说无论怎样回答都是 false。

所以要养成自己给变量进行初始化的习惯。而且在回答是和否时,最好两种情况都处理:
    if MsgBox('你确认跳过欢迎界面吗?', mbConfirmation, MB_YESNO) = IDYES then
      restart:=false  //写法2
    else
      restart:=true;  //写法2
离线spser

发帖
30
金钱
300
威望
30
只看该作者 2 发表于: 2015-04-21
function InitializeSetup(): Boolean;
begin
Result := true;
    restart:= (not MsgBox('你确认跳过欢迎界面吗?', mbConfirmation, MB_YESNO) = IDYES)
离线axlswd

发帖
95
金钱
910
威望
91
只看该作者 3 发表于: 2015-04-21
原来是这样,谢谢虎版和楼上朋友的热心回复