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

时间:2017-04-29 14:00:14

标签: inno-setup

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

问题我认为是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;

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

你可以使用Botva2库 http://krinkels.org/threads/botva2.1931/ 如果你不能理解rusian,请使用谷歌翻译 你可以使用它创建一些很棒的安装程序 图像f.e Botva2 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;

答案 2 :(得分:0)

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

  1. 将您的计算机设置为100%DPI
  2. 制作一个大小(宽度/高度)适合您的InnoSetup页面/表单的位图
  3. 获取这些宽度和高度(右键单击bmp文件中的属性)
  4. 使用下面的代码
  5. 将您的计算机设置为150%DPI,并创建适合150%DPI的位图,并使用它代替第一个(适合100%DPI),这样一来,它对于100%和200%的外观都很不错< / li>

代码:

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 使位图比宽度/高度属性扩展(如果较小)或缩小(如果较大)

P.S。当然,您可以使用多个文件,也可以使用一个文件,具体取决于用户的DPI设置(DPI settings with Inno Setup),但是位图没有压缩,所以我不喜欢这个想法。