TBitmapImage
我在 Inno Setup 安装程序的欢迎页面中添加了。当WizardResizable设置设为 True 并调整向导窗口的大小时,承载位图图像的控件边界也会调整大小,并且当发生这种情况时,其背景颜色也会发生变化,如以下屏幕截图所示:
这是我无意中的行为。我该如何解决?
我尝试将AutoSize
属性设置为 false,并使用固定Height
的Width
属性并测试Anchors
组合,但问题仍然存在。
这是我的实际和完整的代码(AuthorWebsiteBitmap
是位图):
[Setup]
WizardResizable=yes
WizardStyle=Classic
[Code]
// - - - - - - - - - - - - - - - - - - - - - - //
// Creates the author website related controls //
// - - - - - - - - - - - - - - - - - - - - - - //
procedure CreateAuthorControls(AuthorWebsiteUrl: String);
var
InstallerAuthorLabel: TNewStaticText;
AuthorWebsiteLabel : TNewStaticText;
AuthorWebsiteBitmap : TBitmapImage;
begin
// Set AuthorWebsiteBitmap control properties...
AuthorWebsiteBitmap := TBitmapImage.Create(WizardForm);
AuthorWebsiteBitmap.Parent := WizardForm.WelcomePage;
AuthorWebsiteBitmap.AutoSize := True;
AuthorWebsiteBitmap.Left := (WizardForm.WizardBitmapImage.Left + WizardForm.WizardBitmapImage.Width) + ScaleX(10);
AuthorWebsiteBitmap.Top := (WizardForm.WelcomeLabel2.Top + WizardForm.WelcomeLabel2.Height) - (AuthorWebsiteBitmap.Height div 2) - ScaleX(16);
AuthorWebsiteBitmap.Cursor := crHand
AuthorWebsiteBitmap.OnClick := @AuthorWebsiteControlClick;
AuthorWebsiteBitmap.Anchors := [akLeft, akBottom];
AuthorWebsiteBitmap.Visible := (AuthorWebsiteUrl <> '');
ExtractTemporaryFiles('{tmp}\WizardBitmaps\AuthorWebsiteWhite.bmp');
AuthorWebsiteBitmap.Bitmap.LoadFromFile(ExpandConstant('{tmp}\WizardBitmaps\AuthorWebsiteWhite.bmp'));
// Resize WelcomeLabel2 height to be able see AuthorWebsiteBitmap control.
WizardForm.WelcomeLabel2.Height := WizardForm.WelcomeLabel2.Height - (AuthorWebsiteBitmap.Height + ScaleY(8));
// This will not work...
// AuthorWebsiteBitmap.BringToFront();
// Set AuthorWebsiteLabel control properties.
AuthorWebsiteLabel := TNewStaticText.Create(WizardForm);
AuthorWebsiteLabel.Parent := WizardForm.WelcomePage;
AuthorWebsiteLabel.Left := AuthorWebsiteBitmap.Left;
AuthorWebsiteLabel.Top := AuthorWebsiteBitmap.Top - ScaleY(18);
AuthorWebsiteLabel.Cursor := crHand;
AuthorWebsiteLabel.OnClick := @AuthorWebsiteControlClick;
AuthorWebsiteLabel.Anchors := [akLeft, akBottom];
AuthorWebsiteLabel.Visible := (AuthorWebsiteUrl <> '');
AuthorWebsiteLabel.Caption := CustomMessage('SetupOpenAuthorWebsite');
// Set InstallerAuthorLabel control properties.
InstallerAuthorLabel := TNewStaticText.Create(WizardForm);
InstallerAuthorLabel.Parent := WizardForm;
InstallerAuthorLabel.Left := ScaleX(2);
InstallerAuthorLabel.Top := WizardForm.NextButton.Top + WizardForm.NextButton.Height div 2 + ScaleY(10) - ScaleY(2);
InstallerAuthorLabel.Anchors := [akLeft, akBottom];
InstallerAuthorLabel.Caption := CustomMessage('SetupMadeBy');
end;
<event('InitializeWizard')>
procedure InitializeWizard1();
begin
CreateAuthorControls(ExpandConstant('{#AuthorWebsite}'));
end;
更新
我已经通过这种方式减轻了不必要的颜色变化效果:
AuthorWebsiteBitmap.BackColor := TNewNotebookPage(AuthorWebsiteBitmap.Parent).Color;
但理想的解决方案是避免自动调整大小。
WelcomePage
Inno Setup 会自动将和页面上的所有控件拉伸FinishedPage
至其全宽。似乎它不期望那里有自定义控件。您必须以某种方式解决它。
对于您来说(因为图像右侧没有任何内容),一个简单的解决方案就是将背景颜色设置为页面颜色(白色/窗口颜色)。
尽管它对于手动操作来说效果不是很好。
另一个选项是将图像放在容器控件上(例如
TPanel
)。Inno Setup 将仅调整容器控件的大小,而图像保持不变。