我在 In Inno Setup 安装程序的欢迎页面中添加了
TBitmapImage
。当 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;
但理想的解决方案是避免自动调整大小。
Inno Setup 自动调整
WelcomePage
和 FinishedPage
页面上所有控件的大小。看来它不期望那里有自定义控件。
你必须以某种方式解决它。
在您的情况下(因为图像右侧没有任何内容),一个简单的解决方案是将背景颜色简单地设置为页面颜色(白色/窗口颜色)。
AuthorWebsiteBitmap.BackColor := WizardForm.WelcomePage.Color;
虽然与手持客户的配合不太好。
另一种选择是将图像放置在容器控件上(例如
TPanel
)。 Inno Setup 只会调整容器控件的大小,使图像保持不变。