【问题标题】:Setup Programs created using Inno Setup Compiler doesn't display Minimize Animation使用Inno Setup Compiler创建的安装程序不显示最小化动画
【发布时间】:2016-11-19 13:12:30
【问题描述】:

我的问题是为什么 Inno Setup Compiler(Unicode 或 ANSI)以及由它进行的任何设置都不会像在其他 Windows 程序中那样最小化显示一个不错的最小化动画?

它显示了一个非常基本的最小化动画............为什么会这样?

我知道Borland Delphi是Inno Setup Compiler的Compiler,但是Borland Delphi没有那么糟糕的Minimize Animation............它像Windows System Windows最小化一样正常最小化(比如Explorer 、计算机、控制面板)......

我还注意到 Windows Installer Creater Nullsoft Scriptable Install System - NSIS 和使用它进行的设置也像我说的那样最小化。

我该如何解决这个问题?

更新问题

我还添加了一个代码来播放在 Inno Setup 的 WizardForm 上的许多 Windows 应用程序中可以看到的漂亮的缩放最小化/恢复动画,但是当我在将此代码添加到 Inno Setup 后单击WizardForm 的最小化按钮时编译器的源代码,Nice Zooming 动画无法播放,并且永远无法使用它最小化,只有添加此代码后才能使用任务栏按钮将其最小化。所以这意味着这段代码不起作用或其他任何错误............为什么这不起作用???

我添加到单元WizardForm的代码:

interface

uses
  Windows;

type
  TTrayZoom = class(TObject)
  private
    class function GetTrayRect: TRect;
    class procedure DoZoom(const Wnd: HWND; const Src, Dest: TRect);
  public
    class procedure ZoomToTray(const Wnd: HWND);
    class procedure ZoomFromTray(const Wnd: HWND);
  end;

implementation

class procedure TTrayZoom.DoZoom(const Wnd: HWND; const Src, Dest: TRect);
begin
  DrawAnimatedRects(Wnd, IDANI_CAPTION, Src, Dest);
end;

class function TTrayZoom.GetTrayRect: TRect;
var
  TaskbarWnd, TrayWnd: HWND;
begin
  TaskbarWnd := FindWindow('Shell_TrayWnd', nil);
  TrayWnd := FindWindowEx(TaskbarWnd, 0, 'TrayNotifyWnd', nil);
  GetWindowRect(TrayWnd, Result);
end;

class procedure TTrayZoom.ZoomFromTray(const Wnd: HWND);
var
  WndRect: TRect;
begin
  GetWindowRect(Wnd, WndRect);
  DoZoom(Wnd, GetTrayRect, WndRect);
end;

class procedure TTrayZoom.ZoomToTray(const Wnd: HWND);
var
  WndRect: TRect;
begin
  GetWindowRect(Wnd, WndRect);
  DoZoom(Wnd, WndRect, GetTrayRect);
end;

我从if WMSysCommand..... = SCMINIMIZE 调用TTrayZoom.ZoomToTray 并从if WMSysCommand..... = SCRESTORE 调用TTrayZoom.ZoomFromTray,并将HWND 参数设置为WizardForm.Handle

但是这些代码永远不会起作用,我什至不知道它们是否被调用。 :(

WizardForm 中播放这个缩放动画有什么问题?

【问题讨论】:

  • No........避免在这里使用DrawAnimatedRects!如果需要,您可以轻松设置 Result := 0 并调用 ShowWindow 来最小化、恢复甚至最大化。

标签: inno-setup restore minimize


【解决方案1】:

我想说有两个问题。

  1. 对于具有任务栏按钮的窗口显示动画。向导窗体没有任务栏按钮。

    安装程序的任务栏按钮属于隐藏的主窗口。

    从历史上看,安装程序有全屏背景渐变蓝色窗口。甚至 Inno Setup 也支持这一点。

    虽然默认情况下不再启用该背景窗口(@98​​7654322@ 在 Inno Setup 的现代版本中默认为 No),但它仍然存在并拥有任务栏按钮。

  2. Inno Setup 是使用旧版 Delphi 构建的,可能无法很好地使用最小化功能。

一般来说,我会说您应该提交功能请求/错误报告以解决此问题。

【讨论】:

  • 感谢您的回复,我为此向JR Software 提交了功能请求/错误报告。我想知道我不能通过在更新的Delphi 版本中编译它或在 Inno Setup 的 WizardForm Delphi 源代码中添加taskbar button feature 来解决这个问题吗?有可能吗?
  • 我不能将AnimateWindow Windows API 函数添加到 WizardForm 的源代码吗?
  • 我绝对可以通过在较新版本的 Delphi 中编译 Inno Setup 并在任务栏上显示向导表单来解决。如果主/背景窗口是向导窗体的父窗口,您可能还必须摆脱主窗口。
  • 我在Delphi 2009 with Update 5编译了Inno Setup,但还是得到了这个奇怪的动画......。但神秘的是我用来编译的编译器,在这种情况下@ 987654331@ 有这个动画很好,因为我认为它是一个更新的版本......但是为什么这个动画没有继承到 Inno Setup Compiler 的 WizardFormCompForm
  • 我已经在我的帖子中回答了这个问题。因为WizardForm 没有任务栏按钮。而且很可能不在顶级窗口中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-24
  • 1970-01-01
相关资源
最近更新 更多