使用 Inno Setup Compiler 创建的安装程序不显示最小化动画
Setup Programs created using Inno Setup Compiler doesn't display Minimize Animation
我的问题是为什么 Inno Setup 编译器(Unicode 或 ANSI)和它所做的任何设置都不会像其他 Windows 程序那样最小化显示漂亮的最小化动画?
它显示一个非常基本的最小化动画.........为什么?
我知道 Borland Delphi
作为 Inno Setup Compiler 的编译器,但是 Borland Delphi
没有这么糟糕的最小化动画......它通常最小化为 Windows系统Windows最小化(如资源管理器、计算机、控制面板)................
我还注意到 Windows Installer Creater Nullsoft Scriptable Install System - NSIS
和使用它进行的设置也像我说的那样最小化。
我该如何解决这个问题?
更新问题
我还添加了一个代码来播放在 Inno Setup 的 WizardForm
上的许多 Windows 应用程序中可以看到的漂亮的缩放最小化/恢复动画,但是当我单击 WizardForm
' s 将此代码添加到 Inno Setup Compiler 的源代码后的最小化按钮,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
中播放缩放动画有什么问题?
我想说有两个问题。
为具有任务栏按钮的 windows 显示动画。向导窗体没有任务栏按钮。
安装程序的任务栏按钮属于隐藏的主要window。
过去,安装程序的全屏背景渐变蓝色 windows。甚至 Inno Setup 也支持这一点。
虽然默认情况下不再启用背景 window(WindowVisible
directive 在现代版本的 Inno Setup 中默认为 No
),但它仍然存在并拥有任务栏按钮.
Inno Setup 是使用 Delphi 的古老版本构建的,可能无法很好地使用最小化功能。
一般来说,我认为您应该提交功能 request/bug 报告以解决此问题。
我的问题是为什么 Inno Setup 编译器(Unicode 或 ANSI)和它所做的任何设置都不会像其他 Windows 程序那样最小化显示漂亮的最小化动画?
它显示一个非常基本的最小化动画.........为什么?
我知道 Borland Delphi
作为 Inno Setup Compiler 的编译器,但是 Borland Delphi
没有这么糟糕的最小化动画......它通常最小化为 Windows系统Windows最小化(如资源管理器、计算机、控制面板)................
我还注意到 Windows Installer Creater Nullsoft Scriptable Install System - NSIS
和使用它进行的设置也像我说的那样最小化。
我该如何解决这个问题?
更新问题
我还添加了一个代码来播放在 Inno Setup 的 WizardForm
上的许多 Windows 应用程序中可以看到的漂亮的缩放最小化/恢复动画,但是当我单击 WizardForm
' s 将此代码添加到 Inno Setup Compiler 的源代码后的最小化按钮,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
中播放缩放动画有什么问题?
我想说有两个问题。
为具有任务栏按钮的 windows 显示动画。向导窗体没有任务栏按钮。
安装程序的任务栏按钮属于隐藏的主要window。
过去,安装程序的全屏背景渐变蓝色 windows。甚至 Inno Setup 也支持这一点。
虽然默认情况下不再启用背景 window(
WindowVisible
directive 在现代版本的 Inno Setup 中默认为No
),但它仍然存在并拥有任务栏按钮.Inno Setup 是使用 Delphi 的古老版本构建的,可能无法很好地使用最小化功能。
一般来说,我认为您应该提交功能 request/bug 报告以解决此问题。