循环命令或函数直到条件在Inno Setup中变为True

时间:2016-07-21 16:01:53

标签: inno-setup

我想在运行使用Inno Setup创建的程序安装程序时向我的用户显示一个Nice Welcome Animated GIF。

我希望使用Isgsg.dll向订单显示一些PNG图像(因为Inno安装程序还不支持显示动画GIF),直到安装程序完成初始化我的代码量为止。

我编写了一个代码来按顺序显示这些PNG图像,但它会在显示最后一个之后停止。

我需要在之前显示的最后一张PNG图像后继续显示。

如果安装程序已初始化,(我的意思是WizardForm可见),循环程序应该停止。

我写的代码显示那些PNG图像:

function InitializeSetup(): Boolean;
var
  DlgWait: TForm;
if Result = True then begin
ExtractTemporaryFile('Welcome1.png');
ExtractTemporaryFile('Welcome2.png');
ExtractTemporaryFile('Welcome3.png');
ExtractTemporaryFile('Welcome4.png');
ExtractTemporaryFile('Welcome5.png');
ExtractTemporaryFile('Welcome6.png');
ExtractTemporaryFile('Welcome7.png');

<<<循环应该从这里开始>>>

ShowSplashScreen(DlgWait.Handle,ExpandConstant('{tmp}\Welcome1.png'),0250,1000,0250,0,255,True,$FFFFFF,10);
ShowSplashScreen(DlgWait.Handle,ExpandConstant('{tmp}\Welcome2.png'),0250,1000,0250,0,255,True,$FFFFFF,10);
ShowSplashScreen(DlgWait.Handle,ExpandConstant('{tmp}\Welcome3.png'),0250,1000,0250,0,255,True,$FFFFFF,10);
ShowSplashScreen(DlgWait.Handle,ExpandConstant('{tmp}\Welcome4.png'),0250,1000,0250,0,255,True,$FFFFFF,10);
ShowSplashScreen(DlgWait.Handle,ExpandConstant('{tmp}\Welcome5.png'),0250,1000,0250,0,255,True,$FFFFFF,10);
ShowSplashScreen(DlgWait.Handle,ExpandConstant('{tmp}\Welcome6.png'),0250,1000,0250,0,255,True,$FFFFFF,10);
ShowSplashScreen(DlgWait.Handle,ExpandConstant('{tmp}\Welcome7.png'),0250,1000,0250,0,255,True,$FFFFFF,10);

<<<如果不是WizardForm可见,则应该从这里继续循环,否则应该停止其他循环>>>

...
end;

我怎么能像我期望的那样这样做?

更新的问题

我无法想到为什么本规范无效。

此DLL要求PNG文件的文件名为AnsiString

但我提供了String

这是错误还是其他任何Synatx错误都无法正常工作?

Not Working表示显示循环过程的PNG图像不起作用。

我尝试添加的代码使用Repeat Until执行此条件循环:

function InitializeSetup(): Boolean;
var
  DlgWait: TForm;
  IMessageHandler: TForm;
  X: Integer;
  ErrorCode: Integer;
  LblWait: TLabel;
if Result := True then begin
DlgWait := TForm.Create(nil);
DlgWait.Hide;
begin
Order:=1;
Repeat
ShowSplashScreen(DlgWait.Handle,ExpandConstant('{tmp}\Welcome+IntToStr(Order)+.png'),0250,1000,0250,0,255,True,$FFFFFF,10);
Order:=Order+1;
Until FileExists(ExpandConstant('{tmp}\Welcome+IntToStr(Order)+.png')) = False;
end;
end;

是否有语法错误?

但编译器没有给出任何编译器警告或错误。

先谢谢。

1 个答案:

答案 0 :(得分:2)

您需要在结束时重置计数器。这样的事情应该让你开始。 (注意:未经测试 - 我没有在此机器上安装InnoSetup。将function InitializeSetup(): Boolean; var DlgWait: TForm; IMessageHandler: TForm; X: Integer; ErrorCode: Integer; LblWait: TLabel; const NumImages = 7; begin if Result then begin DlgWait := TForm.Create(nil); DlgWait.Hide; Order := 1; repeat ShowSplashScreen(DlgWait.Handle, ExpandConstant('{tmp}\Welcome' + IntToStr(Order) + '.png'), 0250, 1000, 0250, 0,255, True, $FFFFFF, 10); Order := Order + 1; if Order > NumImages then Order := 1; until WizardForm.Visible; end; end; 中的测试替换为适合检测可见的WizardForm的任何内容。)

POST https://outlook.office.com/api/beta/me/findmeetingtimes

Prefer: outlook.timezone="Pacific Standard Time"
Content-Type: application/json 

{ 
  "Attendees": [ 
    { 
      "Type": "Required",  
      "EmailAddress": { 
        "Address": "fannyd@prosewareltd.onmicrosoft.com" 
      } 
    } 
  ],  
  "TimeConstraint": { 
    "Timeslots": [ 
       { 
        "Start": { 
          "Date": "2016-05-20",  
          "Time": "7:00:00",  
          "TimeZone": "Pacific Standard Time" 
        },  
        "End": { 
          "Date": "2016-05-20",  
          "Time": "17:00:00",  
          "TimeZone": "Pacific Standard Time" 
        } 
      } 
    ] 
  },  
  "MeetingDuration": "PT1H" 
}