【问题标题】:Display an image when a task is selected选择任务时显示图像
【发布时间】:2017-07-12 03:32:12
【问题描述】:

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

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

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;

【问题讨论】:

    标签: inno-setup pascalscript


    【解决方案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;
    


    尽管在我看来,您的“任务”实际上应该是设置类型或组件。用户可以选择“标准”、“精简版”和“专业版”的组合,这对我来说没有意义。这些不应该是一个不同的选项吗?

    【讨论】:

    • 是的,如果其中一个被选中,其他两个必须取消选中。
    • 那么为什么要在问题中显示复选框?那些应该是单选按钮。再说一遍,这些不是任务,而是设置类型或组件。
    • 无论如何,我已经回答了你的问题。
    • 那么在这部分中我应该使用什么目录:'pro.bmp'? |'{app}\pro.bmp'|?
    • 因为您每次都加载相同的图像 (BitmapImage1.bmp)。您没有使用 Image 变量。按原样使用我的代码。
    【解决方案2】:

    添加 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;
    

    【讨论】:

      猜你喜欢
      • 2021-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-13
      • 2023-01-04
      • 1970-01-01
      • 2013-10-14
      • 1970-01-01
      相关资源
      最近更新 更多