gpt4 book ai didi

image - 在 Inno Setup 中 ProgressGauge 栏下的 wpInstalling 页面上显示多个图像(幻灯片)

转载 作者:行者123 更新时间:2023-12-04 11:42:10 27 4
gpt4 key购买 nike

我准备了一个简单的脚本,在 ProgressGauge 下显示图像酒吧在 wpInstalling页。
但是...我需要更复杂的功能。
我需要的是多张图像显示,每张在 X(例如 7)秒后(当安装时间超过 X 秒 * 图像数时循环)或每张在 X(例如 10)% 安装后显示。我试图在 ProgressGauge.Position 中嵌入图像显示,但我失败了。
这是我所拥有的:

procedure CurPageChanged(CurPageID: Integer);
var
BmpFile: TBitmapImage;
begin
ExtractTemporaryFile('01.bmp');
ExtractTemporaryFile('02.bmp');
ExtractTemporaryFile('03.bmp');

if CurPageID = wpInstalling then
begin
BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\01.bmp'));
BmpFile.Width:= ScaleX(420);
BmpFile.Height:= ScaleY(180);
BmpFile.Left := WizardForm.ProgressGauge.Left + ScaleX(0);
BmpFile.Top := WizardForm.ProgressGauge.Top + ScaleY(35);

// BmpFile.Parent:= WizardForm.InstallingPage;
// BmpFile:= TBitmapImage.Create(WizardForm);
// BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\03.bmp'));
// BmpFile.Width:= ScaleX(420);
// BmpFile.Height:= ScaleY(400);
// BmpFile.Left := WizardForm.ProgressGauge.Left + ScaleX(0);
// BmpFile.Top := WizardForm.ProgressGauge.Top + ScaleY(35);
// BmpFile.Parent:= WizardForm.InstallingPage;

// BmpFile:= TBitmapImage.Create(WizardForm);
// BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\03.bmp'));
// BmpFile.Width:= ScaleX(420);
// BmpFile.Height:= ScaleY(400);
// BmpFile.Left := WizardForm.ProgressGauge.Left + ScaleX(0);
// BmpFile.Top := WizardForm.ProgressGauge.Top + ScaleY(35);
// BmpFile.Parent:= WizardForm.InstallingPage;
end;
end;
目标是:
关于 wpInstalling应该每 X 秒显示 X 个图像,或者在 X% 的安装之后显示。

最佳答案

ProgressGauge 没有进度更改事件,也无法处理您需要使用 Windows API 计时器的设置应用程序消息。不幸的是,这个计时器需要一个回调函数,您无法在 Inno Setup 脚本中定义该函数,因此您需要一些外部库来为您完成这项工作。但是有 InnoCallback 可以做到这一点的图书馆。

对于以下代码复制 InnoCallback.dll 库到您的安装目录中,将此代码与您的 Inno Setup 脚本合并,并在 OnSlideTimer 中实现某种幻灯片翻页。将定期调用的事件(每秒使用当前设置)。

[Files]
Source: "InnoCallback.dll"; DestDir: "{tmp}"; Flags: dontcopy

[code]
var
TimerID: Integer;

type
TTimerProc = procedure(Wnd: HWND; Msg: UINT; TimerID: UINT_PTR;
SysTime: DWORD);

function WrapTimerProc(Callback: TTimerProc; ParamCount: Integer): LongWord;
external 'wrapcallback@files:InnoCallback.dll stdcall';
function SetTimer(hWnd: HWND; nIDEvent, uElapse: UINT;
lpTimerFunc: UINT): UINT; external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd: HWND; uIDEvent: UINT): BOOL;
external 'KillTimer@user32.dll stdcall';

procedure OnSlideTimer(Wnd: HWND; Msg: UINT; TimerID: UINT_PTR;
SysTime: DWORD);
begin
{ here you can turn your slideshow pages; use some variable to store the }
{ current index of the slide you are on, note that this procedure is called }
{ periodically each 1000 ms (see below why), so here you can also check the }
{ progress value, if you want to }
end;

procedure StartSlideTimer;
var
TimerCallback: LongWord;
begin
TimerCallback := WrapTimerProc(@OnSlideTimer, 4);
{ third parameter here is the timer's timeout value in milliseconds }
TimerID := SetTimer(0, 0, 1000, TimerCallback);
end;

procedure KillSlideTimer;
begin
if TimerID <> 0 then
begin
if KillTimer(0, TimerID) then
TimerID := 0;
end;
end;

function InitializeSetup: Boolean;
begin
Result := True;
TimerID := 0;
end;

procedure DeinitializeSetup;
begin
KillSlideTimer;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpInstalling then
StartSlideTimer
else
KillSlideTimer;
end;

关于image - 在 Inno Setup 中 ProgressGauge 栏下的 wpInstalling 页面上显示多个图像(幻灯片),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10130184/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com