选择任务时显示图像

时间:2017-07-12 03:32:13

标签: inno-setup pascalscript

我希望任务在检查其中一个时显示不同的图像。

例如,如果我有三个不同的任务:

Task 1: Standard version
Task 2: Lite version
Task 3: Pro version
  • 选中任务1时必须显示图像。
  • 选中任务2时,必须隐藏任务1图像并显示任务2图像。
  • 选中任务3时,必须隐藏任务图像下方的其他人并显示任务3图像。

这里有一些代码

[Code]
{ RedesignWizardFormBegin } { Don't remove this line! }
{ Don't modify this section. It is generated automatically. }
var
  BitmapImage1: TBitmapImage;

procedure RedesignWizardForm;
begin
  { BitmapImage1 }
  BitmapImage1 := TBitmapImage.Create(WizardForm);
  with BitmapImage1 do
  begin
    Parent := WizardForm.SelectTasksPage;
    Left := ScaleX(320);
    Top := ScaleY(88);
    Width := ScaleX(57);
    Height := ScaleY(57);
    ExtractTemporaryFile('WizardForm.BitmapImage1.bmp');
    Bitmap.LoadFromFile(ExpandConstant('{tmp}\WizardForm.BitmapImage1.bmp'));
  end;

  with WizardForm.TasksList do
  begin
    Width := ScaleX(257);
    Height := ScaleY(200);
    Visible := False;
  end;
end;

2 个答案:

答案 0 :(得分:1)

  • 使用WizardIsTaskSelected(旧版本的Inno Setup中的IsTaskSelected)来查找已选择的任务。
  • 处理WizardForm.TasksList.OnClickCheckCurPageChanged以检测选择更改并相应地更新图像。
[Files]
Source: "lite.bmp"; Flags: dontcopy
Source: "pro.bmp"; Flags: dontcopy
Source: "std.bmp"; Flags: dontcopy

[Tasks]
Name: std; Description: "Standard version"; Flags: exclusive
Name: lite; Description: "Lite version"; Flags: exclusive
Name: pro; Description: "Pro version"; Flags: exclusive

[Code]
var
  BitmapImage1: TBitmapImage;

procedure UpdateTasksImage;
var
  Image: string;
begin
  if WizardIsTaskSelected('pro') then Image := 'pro.bmp'
    else
  if WizardIsTaskSelected('lite') then Image := 'lite.bmp'
    else
  if WizardIsTaskSelected('std') then Image := 'std.bmp'
    else Image := '';

  if Image <> '' then
  begin
    ExtractTemporaryFile(Image); 
    BitmapImage1.Bitmap.LoadFromFile(ExpandConstant('{tmp}\' + Image));
    BitmapImage1.Visible := True;
  end
    else
  begin
    BitmapImage1.Visible := False;
  end;
end;

procedure TasksListClickCheck(Sender: TObject);
begin
  { Update image, when task selection changes }
  UpdateTasksImage;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  { Update image, when task page is entered }
  { (as tasks can be selected by changing setup type or components) }
  if CurPageID = wpSelectTasks then
  begin
    UpdateTasksImage;
  end;
end;

procedure InitializeWizard;
begin
  BitmapImage1 := TBitmapImage.Create(WizardForm);
  with BitmapImage1 do
  begin
    Parent := WizardForm.SelectTasksPage;
    Left := ScaleX(320);
    Top := ScaleY(88);
    Width := ScaleX(57);
    Height := ScaleY(57);
  end;

  with WizardForm.TasksList do
  begin
    Width := ScaleX(257);
    Height := ScaleY(200);
  end;

  WizardForm.TasksList.OnClickCheck := @TasksListClickCheck
end;

enter image description here

enter image description here

虽然在我看来,你的任务&#34;实际应该是设置类型或组件。对我来说,用户可以选择&#34;标准&#34;,&#34; lite&#34;的组合是没有意义的。和&#34;亲&#34;。那不是不同的选项吗?

答案 1 :(得分:0)

添加 OnClickCheck 事件: 例如:

var
  BitmapImage1: TBitmapImage;
  BitmapImage2: TBitmapImage;
  BitmapImage3: TBitmapImage;

procedure TasksListClickCheck(Sender: TObject);
begin
    if (WizardForm.TasksList.Checked[0] = True) then
    begin
      BitmapImage1 := TBitmapImage.Create(WizardForm);
      with BitmapImage1 do
      begin
        Parent := WizardForm.SelectTasksPage;
        Left := ScaleX(320);
        Top := ScaleY(88);
        Width := ScaleX(57);
        Height := ScaleY(57); 

        ExtractTemporaryFile('WizardForm.BitmapImage1.bmp');        
   Bitmap.LoadFromFile(ExpandConstant('{tmp}\WizardForm.BitmapImage1.bmp'));
      end;
    end;

    if (WizardForm.TasksList.Checked[1] = True) then
    begin
      BitmapImage2 := TBitmapImage.Create(WizardForm);
      with BitmapImage1 do
      begin
        Parent := WizardForm.SelectTasksPage;
        Left := ScaleX(320);
        Top := ScaleY(88);
        Width := ScaleX(57);
        Height := ScaleY(57);
        ExtractTemporaryFile('WizardForm.BitmapImage2.bmp');        
   Bitmap.LoadFromFile(ExpandConstant('{tmp}\WizardForm.BitmapImage2.bmp'));
      end;
    end;
    if (WizardForm.TasksList.Checked[2] = True) then
    begin
      BitmapImage3 := TBitmapImage.Create(WizardForm);
      with BitmapImage1 do
      begin
        Parent := WizardForm.SelectTasksPage;
        Left := ScaleX(320);
        Top := ScaleY(88);
        Width := ScaleX(57);
        Height := ScaleY(57);
        ExtractTemporaryFile('WizardForm.BitmapImage3.bmp');        
   Bitmap.LoadFromFile(ExpandConstant('{tmp}\WizardForm.BitmapImage3.bmp'));
      end;
    end;
end;

procedure InitializeWizard;
begin        
    WizardForm.TasksList.OnClickCheck := @TasksListClickCheck

    with WizardForm.TasksList do
    begin
      Width := ScaleX(257);
      Height := ScaleY(200);
      Visible := True;
    end;
end;