以下问题展示了如何在 Inno Setup 向导窗口中显示描绘所选组件的图像:
放大 Inno Setup 组件页面,仅包含预览和说明
相反,我想修改代码以在单独的窗口(512x400 尺寸)上显示图像。
像这样:
基于我的回答到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;