我正在尝试在自定义页面上显示图像我可以在预定义页面上显示自定义页面或图像,但不能在自定义页面上显示。
问题我认为是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;
答案 0 :(得分:3)
这就是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)的布局,具有偏移/尺寸缩放和图像拉伸:
答案 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设置并放置位图:
代码:
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),但是位图没有压缩,所以我不喜欢这个想法。