Inno Setup在自定义页面上放置图像/控件

问题描述 投票:4回答:3

我正在尝试在自定义页面上显示图像,我可以在预定义页面上显示自定义页面或图像,但不能在自定义页面上显示。

问题我认为是与Parent := CustomPage.ID;

Parent := WizardForm.SelectTasksPage;工作。

怎么做得好?

procedure ImageOnClick(Sender: TObject);
var
  ErrorCode: Integer;
begin
  ShellExec('', 'http://test.com', '', '', SW_SHOW, ewNoWait, ErrorCode);
end;

var
  CustomPage: TWizardPage;
  BtnImage: TBitmapImage;

procedure InitializeWizard;
begin
  CustomPage := CreateCustomPage(wpLicense, 'Heading', 'Sub heading.');

  ExtractTemporaryFile('image.bmp');

  BtnImage := TBitmapImage.Create(WizardForm);
  with BtnImage do
  begin
    Parent := CustomPage.ID;
    Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\image.bmp');
    AutoSize := True;
    Left := 90;
    Top := WizardForm.SelectTasksPage.Top + WizardForm.SelectTasksPage.Height - Height - 8;
    Cursor := crHand;
    OnClick := @ImageOnClick;
  end;
end;
inno-setup
3个回答
3
投票

这就是TWizardPage.Surface类型的TNewNotebookPage

此外,永远不要使用绝对坐标和大小。当在高DPI /缩放显示器上显示向导时,您的布局将会中断,现在“视网膜”显示的情况非常普遍。使用ScaleXScaleY函数。出于同样的原因,您应该准备好具有不同分辨率的图像(请参阅Inno Setup WizardImageFile looks bad with font scaling on Windows 7)。或者至少缩放/拉伸位图。

CustomPage := CreateCustomPage(wpLicense, 'Heading', 'Sub heading.');

ExtractTemporaryFile('image.bmp');

BtnImage := TBitmapImage.Create(WizardForm);
with BtnImage do
begin
  Parent := CustomPage.Surface;
  Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\image.bmp');
  AutoSize := True;
  AutoSize := False;
  Height := ScaleX(Height);
  Width := ScaleY(Width);
  Stretch := True;
  Left := ScaleX(90);
  Top := WizardForm.SelectTasksPage.Top + WizardForm.SelectTasksPage.Height -
         Height - ScaleY(8);
  Cursor := crHand;
  OnClick := @ImageOnClick;
end;

100%变焦(96 DPI)时的布局:

Layout on 100% zoom (96 DPI)

150%变焦(144 DPI)时的布局:

Layout on 150% zoom (144 DPI)

150%变焦(144 DPI)的布局,具有偏移/尺寸缩放和图像拉伸:

Layout on 150% zoom (144 DPI) with offset/sizes scaling and image stretching


0
投票

你可以使用Botva2库http://krinkels.org/threads/botva2.1931/使用google翻译如果你无法理解rusian你可以使用这个图像创建一些很棒的安装程序f.eBotva2 example

[code]
#include "botva2.iss"
var SomeImage : Longint;
procedure InitializeWizard();
begin 
{Your Custom page Code Goes Here}
SomeImage := ImgLoad(WizardForm.Handle,'Image.bmp',0,0,854,480,true,true)‌​; 
end;
 procedure CurPageChanged(CurPageID: Integer); 
begin 
ImgSetVisibility(SomeImage,false); 
if (CurPageID = CustomPage.ID) ImgSetVisibility(SomeImage,true);
end;

0
投票

类似于Martin Prikryl的回答。为了处理不同的DPI设置并放置位图:

  1. 将您的机器设置为100%DPI
  2. 制作一个尺寸(宽度/高度)的位图,以适合您的InnoSetup页面/表格
  3. 获取这些宽度和高度(右键单击/属性在bmp文件上)
  4. 使用下面的代码
  5. 将您的机器设置为150%DPI并创建适合150%DPI的位图并使用它代替第一个(适用于100%DPI),这样它看起来很好100%和200%

代码:

WarningImage := TBitmapImage.Create(RisksForm);
WarningImage.Parent := RisksForm;
WarningImage.Bitmap.LoadFromFile(ExpandConstant('{app}')+'uninstall-warning-large.bmp');
WarningImage.Left := ScaleX(24);
WarningImage.Top := ScaleY(120);
WarningImage.Width := ScaleX(544);
WarningImage.Height := ScaleY(211);
WarningImage.Stretch := True;

使用位图的宽度更改544,使用位图的高度更改211(从步骤3开始)

Stretch:= True是否展开位图(如果它更小)或缩小(如果它更大)比宽度/高度属性

附:当然你可以使用多个文件并使用一个取决于用户DPI设置(DPI settings with Inno Setup),但位图没有压缩,所以我不喜欢这个想法。

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