The following questions shows how to display an image depicting a selected components within the Inno Setup wizard window:
Enlarge Inno Setup component page only with preview and description
Instead, I'd like to modify the code to display the image on an separate window (512x400 dimensions).
Like this:
Building upon my answer to Long descriptions on Inno Setup components. You will need to copy HoverTimerProc
and it's supporting functions and global variables.
This answer modifies the HoverComponentChanged
and InitializeWizard
procedures to support an image window in addition to description labels.
[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(Item: Integer);
var
Description: string;
Image: string;
ImagePath: string;
begin
case Item 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();
begin
SetTimer(0, 0, 50, CreateCallback(@HoverTimerProc));
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;
CompLabel.Anchors := [akLeft, akRight, akBottom];
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;