2

我有一个问题,我需要你的帮助..我想找到一种不同的方式来放置一个透明的启动屏幕或更正我的代码。这里的代码可以工作......但是有一个问题,有些人在安装结束时会出错。

这是安装结束时错误的样子 在此处输入图像描述

在此处输入图像描述

我检查了代码中的另一行,发现问题出在启动屏幕的代码上,如果我将其删除,安装程序将完美运行,我看到我需要的是 aprocedure DeinitializeSetup();但我不知道如何将其放入启动屏幕部分,如果我删除其他代码中的内容,例如皮肤,徽标等,我会收到这种错误procedure DeinitializeSetup();。进入 windows 临时文件夹的文件...然后我需要的是procedure DeinitializeSetup();启动屏幕代码中的解决这个问题... :( 这是任何人都可以测试IsUtilsHb.dll的 dll 文件

那么...请如果有人知道放置透明启动屏幕的不同方法...不胜感激..或更好..修复此代码部分:)

[setup]
AppName=Slash PNG
AppVerName=1.0
DefaultDirName={pf}\program

[Languages]
Name: "spanish"; MessagesFile: "compiler:Languages\Spanish.isl"

[Files]
Source: IsUtilsHb.dll; DestDir: {app}; Flags: dontcopy
Source: SplashScreen.png; DestDir: {app}; Flags: dontcopy

[Code]
function SplashScreen(hWnd: Integer; pathPng: String; nSleep: Integer): Integer;
external 'SplashScreen@files:IsUtilsHb.dll stdcall';

procedure InitializeWizard();
var 
  SplashFileName: string;
begin
  SplashFileName := ExpandConstant('{tmp}\SplashScreen.png');
  ExtractTemporaryFile('SplashScreen.png');
  SplashScreen(StrToInt(ExpandConstant('{hwnd}')), SplashFileName, 5000);
end;
4

2 回答 2

2

在浏览了整个互联网之后,我得到了这个解决方案:

这是DLL我正在使用: isgsg.dll

[setup]
AppName=Slash PNG
AppVerName=1.0
DefaultDirName={pf}\program

[Languages]
Name: "spanish"; MessagesFile: "compiler:Languages\Spanish.isl"

Source: "Splash.png"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: isgsg.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression

[Code]
procedure ShowSplashScreen(p1:HWND;p2:string;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer); external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';

procedure InitializeWizard();
begin
  ExtractTemporaryFile('Splash.png');
  ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}\Splash.png'),1000,3000,1000,0,255,True,$FFFFFF,10);
end;
于 2012-11-03T21:30:40.157 回答
1

刚刚添加:

ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}\Splash.png'),1000,3000,1000,0,255,True,$FFFFFF,10);

解释:

ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}\Splash.png'),1000(appear time),3000(show time),1000(disappear time),0(like a intermittent reload time),255(transparency 0..255),True,$FFFFFF (transparency color if not png transp),10); 

像一个intermittent reload time = use 9999999,你看到像一个雷声图像

于 2014-04-26T04:56:14.037 回答