位图图像在 Inno Setup 安装程序中自动调整大小

问题描述 投票:0回答:1

我在 In Inno Setup 安装程序的欢迎页面中添加了

TBitmapImage
。当 WizardResizable 设置设置为 True 并且我调整向导窗口大小时,托管位图图像的控件边界也会调整大小,并且当发生这种情况时其背景颜色也会发生变化,如以下屏幕截图所示:

enter image description here

这是我无意的行为。我该如何解决它?.

我尝试将

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 pascalscript
1个回答
0
投票

Inno Setup 自动调整

WelcomePage
FinishedPage
页面上所有控件的大小。看来它不期望那里有自定义控件。

你必须以某种方式解决它。

在您的情况下(因为图像右侧没有任何内容),一个简单的解决方案是将背景颜色简单地设置为页面颜色(白色/窗口颜色)。

AuthorWebsiteBitmap.BackColor := WizardForm.WelcomePage.Color;

虽然与手持客户的配合不太好。

另一种选择是将图像放置在容器控件上(例如

TPanel
)。 Inno Setup 只会调整容器控件的大小,使图像保持不变。

© www.soinside.com 2019 - 2024. All rights reserved.