天天看點

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>

繼續閱讀