论坛风格切换切换到宽版
  • 19173阅读
  • 25回复

Inno Setup 该怎么设置一个轮播的背景图 [复制链接]

上一主题 下一主题
离线sidelee72
 

发帖
29
金钱
290
威望
29
只看楼主 倒序阅读 0 发表于: 2011-04-24
请问 Inno Setup 该怎么设置一个轮播的背景图?
可以在进入安装阶段之后定时轮播图片?
如下图?
是否可以设定全萤幕或自订尺寸?
请指教


另外
写在code区段的程序码是没办法解出来的是吗?
离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 1 发表于: 2011-04-24
code 区段的程序码的确是没办法解出来的。

你要交替更换背景图,这是可以的,但是要求你对编写代码很熟悉。
图片的大小当然可以自定义。

离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 2 发表于: 2011-04-24
参考代码
[Setup]
WindowVisible=yes
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program

[Files]
; 打包背景图像文件
Source: "bgpic1.bmp"; DestDir: "{tmp}"; Flags: dontcopy
Source: "bgpic2.bmp"; DestDir: "{tmp}"; Flags: dontcopy
Source: "bgpic3.bmp"; DestDir: "{tmp}"; Flags: dontcopy

[code]
var
  
bgPic: TBitmapImage;

// 更换背景图片
// 图标号码 picNum
procedure ChangeBGPicture(picNum: Integer);
var
  
bgpicFile: String;
begin
  
bgpicFile:= ExpandConstant('{tmp}\bgpic')+IntToStr(picNum)+'.bmp';
  bgPic.Bitmap.LoadFromFile(bgpicFile);
  bgPic.Update;
end;

procedure initializewizard;
begin
  
// 释放临时文件背景图像
  
ExtractTemporaryFile('bgpic1.bmp');
  ExtractTemporaryFile('bgpic2.bmp');
  ExtractTemporaryFile('bgpic3.bmp');

  // 主窗口无边框
  
MainForm.BorderStyle:= bsNone;
  // 设置窗口大小并居中
  
MainForm.ClientWidth:= ScaleX(800);     //如果要全屏,则不要该行
  
MainForm.ClientHeight:= ScaleY(600);    //如果要全屏,则不要该行
  
MainForm.Position:= poScreenCenter;    //如果要全屏,则不要该行
  
// 创建背景图像,设置图像大小
  
bgPic:= TBitmapImage.Create(MainForm);
  bgPic.Parent:= MainForm;
  bgPic.Width:= MainForm.ClientWidth;
  bgPic.Height:= MainForm.ClientHeight;
  bgPic.Left:= (MainForm.ClientWidth - bgPic.Width) div 2;
  bgPic.Top:= (MainForm.ClientHeight - bgPic.Height) div 2;
  // 拉伸图像
  
bgPic.Stretch:= True;
end;

procedure CurPageChanged (CurPageID : Integer);
begin
case
CurPageID of
  
wpWelcome: ChangeBGPicture(1);        // 欢迎页面显示背景图片 1
  
wpSelectDir: ChangeBGPicture(2);      // 目录选择页面显示背景图片 2
  
wpInstalling: ChangeBGPicture(3);     // 安装文件页面显示背景图片 3
  
end;
end;
离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 3 发表于: 2011-04-24
离线sidelee72

发帖
29
金钱
290
威望
29
只看该作者 4 发表于: 2011-04-24
回 2楼(gnatix) 的帖子
太棒了!
不过在载入背景图片之前还是会跳出不该出现的视窗

还在研究中.....

请问版主关于这点.....有解决办法吗?
Thanks~!!
离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 5 发表于: 2011-04-24
试试在释放临时文件前添加
MainForm.Visible:= False;
离线sidelee72

发帖
29
金钱
290
威望
29
只看该作者 6 发表于: 2011-04-24
谢谢版主这样倾囊相授
但也许是我懂得太少了
还是一直没办法设定为符合我需要的样式
又不好意思一直麻烦版主
想请问有没有 Inno Setup 相关的网站论坛可以推荐给小弟
我想多翻一些资料自己再研究看看

很少遇到对一个新人这么好的版主
谢谢
离线nan2009

发帖
13
金钱
130
威望
13
只看该作者 7 发表于: 2011-04-24
可以到梦想吧去看看。
离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 8 发表于: 2011-04-27
楼主是不想让原来的背景那怕是闪烁一下吧。要达到这样的效果要么使用插件,要么使用 restools 的 Inno Setup 增强版。
参考下面的代码,在此感谢 restools 的解疑。
; 以下代码需要 Restools 的 INNO SETUP 增强版
;

[Setup]
WindowVisible=no
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program

[Files]
; 打包背景图像文件
Source: "bgpic1.bmp"; DestDir: "{tmp}"; Flags: dontcopy
Source: "bgpic2.bmp"; DestDir: "{tmp}"; Flags: dontcopy
Source: "bgpic3.bmp"; DestDir: "{tmp}"; Flags: dontcopy

[code]
var
  
bgPic: TBitmapImage;

// 获取屏幕尺寸
function GetSystemMetrics(nIndex: Integer): Integer;
  external 'GetSystemMetrics@User32.dll stdcall setuponly';

// 主窗口背景绘成黑色
procedure MainForm_OnPaint(Sender: TObject);
var
  
R: TRect;
begin
  
R.Right := MainForm.ClientWidth;
  R.Bottom := MainForm.ClientHeight;
  MainForm.Canvas.Brush.Color := clBlack;
  MainForm.Canvas.FillRect(R);
end;

// 更换背景图片为图号 picNum
procedure ChangeBGPicture(picNum: Integer);
var
  
bgpicFile: String;
begin
  
bgpicFile:= ExpandConstant('{tmp}\bgpic')+IntToStr(picNum)+'.bmp';
  bgPic.Bitmap.LoadFromFile(bgpicFile);
end;

procedure initializewizard;
begin
// 释放临时文件背景图像
  
ExtractTemporaryFile('bgpic1.bmp');
  ExtractTemporaryFile('bgpic2.bmp');
  ExtractTemporaryFile('bgpic3.bmp');

// 设置主窗口无边框
  
MainForm.BorderStyle:= bsNone;
  MainForm.OnPaint := @MainForm_OnPaint;
  
// 下面两句设置主窗口为全屏
  //MainForm.ClientWidth:= GetSystemMetrics(0);  // 获取屏幕宽度
  //MainForm.ClientHeight:= GetSystemMetrics(1); // 获取屏幕高度

// 下面两句设置自定义大小
  
MainForm.ClientWidth:= ScaleX(800);
  MainForm.ClientHeight:= ScaleY(600);

  MainForm.Position:= poScreenCenter;

// 创建背景图像,设置图像大小
  
bgPic:= TBitmapImage.Create(MainForm);
  bgPic.Parent:= MainForm;
  bgPic.Width:= MainForm.ClientWidth;
  bgPic.Height:= MainForm.ClientHeight;
  bgPic.Align:= alClient;
  bgPic.Stretch:= True;
  
  MainForm.Show;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
case
CurPageID of
  
wpWelcome: ChangeBGPicture(1);        // 欢迎页面显示背景图片 1
  
wpSelectDir: ChangeBGPicture(2);      // 目录选择页面显示背景图片 2
  
wpInstalling: ChangeBGPicture(3);     // 安装文件页面显示背景图片 3
  
end;
end;
离线sidelee72

发帖
29
金钱
290
威望
29
只看该作者 9 发表于: 2011-04-27
Cool~~谢谢版主的提示
已下载 restools 的 Inno Setup 增强版
研究中,大感谢!!!