2011-08-03 88 views
2

我的安装非常简单,它基本上是:Inno Setup的简单进度页面

  1. 欢迎页面
  2. 进度页
  3. 最后一页

的欢迎和最后几页是标准的(只有一个按钮)。 在进度页面,我正在安静地安装一堆其他程序。

实际脚本正在`[Run]部分中安装每个程序。
问题是酒吧达到100%,然后停留在那里。
我只能改变消息文本。

我想达成什么是使用Pascal脚本显示进度(因为它可以让我有更多的灵活性),是这样的:

procedure InitializeWizard; 
begin 
    ProgressPage.SetProgress(1, 100); 
    exec(.......) 
    ProgressPage.SetProgress(15, 100); 
    exec(.......) 
    ProgressPage.SetProgress(40, 100); 
    ... 
    ... 
end; 

这样我可以显示更准确的进度条。这是我(模拟安装来自一个例子服用。):

[Code] 

var 
    ProgressPage: TOutputProgressWizardPage; 

procedure InitializeWizard; 
begin 
    ProgressPage := CreateOutputProgressPage('My App',''); 
end; 

function NextButtonClick(CurPageID: Integer): Boolean; 
var 
    I: Integer; 
begin 
    if CurPageID = wpWelcome then begin 
    ProgressPage.SetText('Starting installation...', ''); 
    ProgressPage.SetProgress(0, 0); 
    ProgressPage.Show; 
    try 
     for I := 0 to 10 do begin 
     ProgressPage.SetProgress(I, 10); 
     Sleep(100); 
     end; 
    finally 
     ProgressPage.Hide; 
    end; 
    end else 
    Result := True; 
end; 

的问题是,当我生成安装程序不显示欢迎页(安装程序正在运行,但没有显示) 。

我在做什么错了?

预先感谢您!

+0

呃,不要在NextButtonClick里面做。 CurStepChanged(ssInstall)最早。 – Deanna

+0

为什么不在NextButtonClick中?它是我第一次在Inno Setup中使用Pascal脚本,所以我可能不知道它应该如何。 – lepe

+0

因为它可以被称为1次或更多时间,所以在大多数安装中,在用户确认“是,安装这个”之前,它也是。 – Deanna

回答

2

找到了!

我失踪:

  • Result := True;ProgressPage.Hide;
  • if CurPageID = wpReady(而不是wpWelcome

这个问题解决了!

4

您可以使用WizardForm.ProgressGauge来控制代码中真实的进度条位置。

+0

你能指点我一些例子吗?我找不到它是如何使用的(只有文档)。 – lepe

+0

没有例子,但对象引用int帮助显示你需要访问的属性。它们可以从[Run]条目的Before/AfterInstall条目中调用。 – Deanna

+0

我想使用WizardForm.ProgressGauge会更简单和优雅。然而,由于我没有例子,我的安装程序工作得很好(因为它是),我可以为您的建议投票。我无法将其设置为正确的答案,因为我无法测试它。我希望你明白。 – lepe