我正在尝试在自定义页面上显示图像,我可以在预定义页面上显示自定义页面或图像,但不能在自定义页面上显示。
问题我认为是与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;
这就是TWizardPage.Surface
类型的TNewNotebookPage
。
此外,永远不要使用绝对坐标和大小。当在高DPI /缩放显示器上显示向导时,您的布局将会中断,现在“视网膜”显示的情况非常普遍。使用ScaleX
和ScaleY
函数。出于同样的原因,您应该准备好具有不同分辨率的图像(请参阅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)时的布局:
150%变焦(144 DPI)时的布局:
150%变焦(144 DPI)的布局,具有偏移/尺寸缩放和图像拉伸:
你可以使用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;
类似于Martin Prikryl的回答。为了处理不同的DPI设置并放置位图:
代码:
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),但位图没有压缩,所以我不喜欢这个想法。