天天看点

Inno Setup GIF 显示插件 GIFCtrl (V2.1 版本)

Inno Setup GIF 显示插件 GIFCtrl (V2.1 版本)
Inno Setup GIF 显示插件 GIFCtrl (V2.1 版本)

 引用来自 test.iss

; -- test.iss --

; restools

; V2.1 可以同时显示 64 个 GIF 图片。解决插件加载后卸载时的延迟问题.

[Setup]

AppName=gifctrl

AppVerName=gifctrl Ver 2.1

DefaultDirName={pf}\gifctrl

DefaultGroupName=gifctrl

OutputDir=userdocs:Inno Setup Examples Output

SolidCompression=yes

[Files]

Source: "gifctrl.dll"; Flags: dontcopy solidbreak

Source: nsisinstall.gif; Flags: dontcopy solidbreak

Source: 0023.gif; Flags: dontcopy solidbreak

Source: "MyProg.exe"; DestDir: "{app}"

Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme

[Icons]

Name: "{group}\gifctrl"; Filename: "{app}\MyProg.exe"

[code]

const

   HALIGN_CENTER = 0; //水平居中

   HALIGN_LEFT = 1;   //水平靠左

   HALIGN_RIGHT = 2;  //水平靠右

   VALIGN_CENTER = 0; //垂直居中

   VALIGN_TOP = 1;    //垂直靠上

   VALIGN_BOTTOM = 2; //垂直靠下

   FIT_NONE = 0;      //不适应窗口

   FIT_WIDTH = 1;     //适应窗口宽度

   FIT_HEIGHT = 2;    //适应窗口高度

   FIT_BOTH = 3;      //适应窗口宽度和高度

   CLR_INVALID = $FFFFFFFF; //自动取容器左上角的颜色作为底色,如果取色失败,用按钮颜色代替。

// 创建 Gif 窗口

function NewGifbWnd(hWndParent: HWND; X, Y, nWidth, nHeight: Integer): HWND; external'newgifwnd@files:gifctrl.dll stdcall';

// 释放 Gif 窗口

function FreeGifWnd(hWndGif: HWND): Boolean; external 'freegifwnd@files:gifctrl.dll stdcall';

// 释放所有 Gif 窗口

function FreeAllGifWnd(): Boolean; external 'freeallgifwnd@files:gifctrl.dll stdcall';

// 设置 Gif 窗口的父窗口

function GifWndSetParent(hWndGif: HWND; hWndParent: HWND): Boolean; external'gifwndsetparent@files:gifctrl.dll stdcall';

// 设置 Gif 窗口的位置大小

function GifWndSetBounds(hWndGif: HWND; X, Y, nWidth, nHeight: Integer): Boolean; external'gifwndsetbounds@files:gifctrl.dll stdcall';

// 载入图片,并设置图片显示位置

function GifWndLoadFromFile(hWndGif: HWND; HAlign, VAlign: Integer; BGColor: DWord; Fit: integer; GifFileName: PChar): Boolean; external 'gifwndloadfromfile@files:gifctrl.dll stdcall';

// 第1 次载入需要指定图片文件“GifFileName”,然后在需要重新载入另外图片的时候重新指定另外的图片文件,重新调整 Align 位置时也需要调用此函数,

// 但是如果只是为了调整 Align 而不想重新载入一次 GifFileName 文件,只需要把 GifFileName 设置为空字符串就可以达到只调整位置,不重载文件。

var

  GifPanel: TPanel;

  GIFHWND1, GIFHWND2: HWND;

function InitializeSetup(): Boolean;

begin

  GIFHWND1 := 0;

  GIFHWND2 := 0;

  Result := True;

end;

procedure DeinitializeSetup();

  FreeAllGifWnd();

procedure LblOnClick(Sender: TObject);

  ErrorCode: Integer;

procedure InitializeWizard();

  GifFileName: String;

  Lbl: TNewStaticText;

  ExtractTemporaryFile('nsisinstall.gif');

  ExtractTemporaryFile('0023.gif');

  GIFHWND1 := NewGifbWnd(WizardForm.InstallingPage.Handle, 0, WizardForm.PROGRESSGAUGE.Top + WizardForm.PROGRESSGAUGE.Height + SCaleY(5),

       WizardForm.InstallingPage.Width, WizardForm.InstallingPage.Height - (WizardForm.PROGRESSGAUGE.Top

       + WizardForm.PROGRESSGAUGE.Height + SCaleY(5)));

  GifWndLoadFromFile(GIFHWND1, HALIGN_CENTER, VALIGN_BOTTOM, CLR_INVALID, FIT_WIDTH, ExpandConstant('{tmp}\nsisinstall.gif'));

  // 创建一个网站 Logo 连接

  GIFHWND2 := NewGifbWnd(WizardForm.Handle, ScaleX(30), WizardForm.Bevel.Top + ScaleY(8), 88, 31);

  GifWndLoadFromFile(GIFHWND2, HALIGN_CENTER, VALIGN_CENTER, CLR_INVALID, FIT_NONE, ExpandConstant('{tmp}\0023.gif'));

  Lbl := TNewStaticText.Create(WizardForm);

  Lbl.Parent := WizardForm;

  Lbl.AutoSize := False;

  Lbl.SetBounds(ScaleX(30), WizardForm.Bevel.Top + ScaleY(8), 88, 31);

  Lbl.OnClick := @LblOnClick;

  Lbl.Cursor := crHand;

procedure CurPageChanged(CurPageID: Integer);

  if CurPageID = wpInstalling then

  begin

    MsgBox('暂停一下,看看效果。', mbInformation, MB_OK);

  end;

点击下面连接下载例子。

<a href="http://restools.hanzify.org/inno/gifctrl/inno_gifctrl_v2.1.zip" target="_blank">http://restools.hanzify.org/inno/gifctrl/inno_gifctrl_v2.1.zip</a>

继续阅读