我想在运行使用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;
是否有语法错误?
但编译器没有给出任何编译器警告或错误。
先谢谢。
答案 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"
}