在额外窗口上预览 Inno Setup 组件

问题描述 投票:0回答:1

以下问题展示了如何在 Inno Setup 向导窗口中显示描绘所选组件的图像:
放大 Inno Setup 组件页面,仅包含预览和说明

相反,我想修改代码以在单独的窗口(512x400 尺寸)上显示图像。

像这样:

enter image description here

components inno-setup preview pascalscript
1个回答
3
投票

基于我的回答Inno Setup 组件的详细描述。您需要复制

HoverTimerProc
,它支持函数和全局变量。

此答案修改了

HoverComponentChanged
InitializeWizard
程序以支持图像窗口以及描述标签。

[Files]
...
Source: Main.bmp; Flags: dontcopy
Source: Additional.bmp; Flags: dontcopy
Source: Help.bmp; Flags: dontcopy

[Code]

var
  CompLabel: TLabel;
  CompForm: TSetupForm;
  CompImage: TBitmapImage;
  LoadingImage: Boolean;

procedure HoverComponentChanged(Index: Integer);
var 
  Description: string;
  Image: string;
  ImagePath: string;
begin
  case Index of
    0: begin Description := 'This is the description of Main Files'; Image := 'main.bmp'; end;
    1: begin Description := 'This is the description of Additional Files'; Image := 'additional.bmp'; end;
    2: begin Description := 'This is the description of Help Files'; Image := 'help.bmp'; end;
  else
    Description := 'Move your mouse over a component to see its description.';
  end;
  CompLabel.Caption := Description;

  if Image <> '' then
  begin
    { The ExtractTemporaryFile pumps the message queue, prevent recursion }
    if not LoadingImage then
    begin
      LoadingImage := True;
      try
        ImagePath := ExpandConstant('{tmp}\' + Image);
        if not FileExists(ImagePath) then
        begin
          ExtractTemporaryFile(Image);
        end;
        CompImage.Bitmap.LoadFromFile(ImagePath);
      finally
        LoadingImage := False;
      end;
    end;
    CompForm.Left := WizardForm.Left + WizardForm.Width;
    CompForm.Top := WizardForm.Top;
    CompForm.Visible := True;
  end
    else
  begin
    CompForm.Visible := False;
  end;
end;

procedure InitializeWizard();
var
  HoverTimerCallback: LongWord;
begin
  HoverTimerCallback := WrapTimerProc(@HoverTimerProc, 4);

  SetTimer(0, 0, 50, HoverTimerCallback);

  CompLabel := TLabel.Create(WizardForm);
  CompLabel.Parent := WizardForm.SelectComponentsPage;
  CompLabel.Left := WizardForm.ComponentsList.Left;
  CompLabel.Width := WizardForm.ComponentsList.Width;
  CompLabel.Height := ScaleY(32);
  CompLabel.Top := WizardForm.ComponentsList.Top + WizardForm.ComponentsList.Height - CompLabel.Height;
  CompLabel.AutoSize := False;
  CompLabel.WordWrap := True;

  CompForm := CreateCustomForm;
  CompForm.ClientWidth := 512;
  CompForm.ClientHeight := 400;
  CompImage := TBitmapImage.Create(CompForm);
  CompImage.Parent := CompForm;
  CompImage.Top := 0;
  CompImage.Left := 0;
  CompImage.Width := CompForm.ClientWidth;
  CompImage.Height := CompForm.ClientHeight;

  WizardForm.ComponentsList.Height := WizardForm.ComponentsList.Height - CompLabel.Height - ScaleY(8);
end;

Component preview window

© www.soinside.com 2019 - 2024. All rights reserved.