一个相对完整的inno setup

代码:

;#define MyAppId "{{01DDF602-7CF8-40C9-816F-AD165F37F5E0}"
#define MyAppName "ABCD"
#define MyAppVersion "1.0.1.2"
#define MyAppPublisher "AAA股份有限公司"
#define MyAppURL "http://www.AAAA.com.cn/"
#define MyAppExeName "AAAA.exe"

#include "trayiconctrl.iss"

[Setup]
AppId={{01DDF602-7CF8-40C9-816F-AD165F37F5E0}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
AppVerName={#MyAppName}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
DefaultDirName={pf}\Julong Educational\SCEngine
DefaultGroupName={#MyAppName}
AllowNoIcons=yes
OutputDir=D:OutputBaseFilename=SCEngine setup
SetupIconFile=installer.ico
Compression=lzma/ultra64
SolidCompression=yes
VersionInfoVersion={#MyAppVersion}
VersionInfoTextVersion={#MyAppVersion}
VersionInfoDescription=SCEngine setup
DisableReadyPage=yes
DisableProgramGroupPage=yes
InternalCompressLevel=ultra64
DirExistsWarning=no
UninstallIconFile=Uninstall.ico

[Messages]
BeveledLabel=

[CustomMessages]
FinishedHeadingLabel=恭喜你,{#MyAppName}安装成功!
FinishedLabel=安装程序已在您的电脑中安装了“{#MyAppName}”。此应用程序可以通过选择安装的快捷方式运行。%n%n单击 [完成(F)] 关闭安装程序。
Tooltip={#MyAppName} Ver 1.0
TooltipText={#MyAppName}安装正在开始...
MenuStrs=显示/隐藏  {#MyAppName} 安装程序;-;关于 {#MyAppName} ;-;退出 {#MyAppName} 安装

[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"  ; WorkingDir: {app};Check: groupicon
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"; WorkingDir: {app}; Check: groupicon
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}";  WorkingDir: {app};Check: desktopicon
;Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}; Filename: {app}\julongEngine.exe; Check: quicklaunchicon; WorkingDir: {app}

[Files]
Source: window.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: window2.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: Close1.bmp; Flags: dontcopy solidbreak
Source: Close2.bmp; Flags: dontcopy solidbreak
Source: Close3.bmp; Flags: dontcopy solidbreak
Source: btnIn1.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: btnIn2.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: btnIn3.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak

Source: "D:\SCEngine Software V1.0 Packet Ver1.0.1.2\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; BeforeInstall: AddToDetaList; AfterInstall: Progress();
Source: "installer.ico"; Flags: dontcopy
//新增按键
Source: DirImg.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: btn_by1.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: btn_by2.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: btn_by3.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: btn_n1.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: btn_n2.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: btn_n3.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: btn_ss1.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: btn_ss2.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: btn_ss3.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: backBtn1.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: backBtn2.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak
Source: backBtn3.bmp; DestDir: {tmp}; Flags: dontcopy solidbreak

[Registry]
Root: HKCU; Subkey: "Software\Microsoft\SCEngine"; valueType: string; valueName: "path" ; valueData: """{app}\{#MyAppExeName}""";Flags: uninsdeletevalue;

[Code]
Const
  WM_SYSCOMMAND = $0112;
  WM_USER = $400;
  WM_ICON_NOTIFY = WM_USER + 22; // 自己定义一个 TrayIcon 的消息标志以和其他的消息区分
  MF_BYPOSITION = $400;
  MF_ENABLED = 0;
  MF_GRAYED = 1;
  IMAGE_ICON = 1;
  LR_LOADFROMFILE = $10;
function ReleaseCapture(): Longint; external '[email protected] stdcall';
function EnableMenuItem(hMenu: UINT; uIDEnableItem, uEnable: UINT): BOOL; external '[email protected] stdcall';
function IsWindowEnabled(hWnd: HWND): BOOL; external '[email protected] stdcall';
function LoadImage(hInst: UINT; ImageName: String; ImageType: UINT; X, Y: Integer; Flags: UINT): THandle; external '[email protected] stdcall';
var
Ico: UINT;
MySetupForm: TSetupForm;
TaskBox1,TaskBox2,TaskBox3,RunBox1,RunBox2,RunBox3,RunBox4: TCheckBox;  //创建目录页面选框和新页面复选框
TaskBox1Label,TaskBox2Label,TaskBox3Label,TaskBox4Label,TaskBox5Label,TaskBox6Label,NewLabel,NewStatusLabel,FinishedLabel3,FinishedLabel4,RunBox1Label,RunBox2Label,RunBox3Label,RunBox4Label: TLabel;  //请选择安装目录

sversion,bigLabel:Tlabel;
//关闭按钮
CloseBtn: TBitmapImage;
//安装百分比
ProgressLabel: TLabel;
//安装细节
DetaList: TNewListBox;
ShowDetaBtn: TNewButton;
//按钮
NewDirEdit,setbtn,setbcbtn:Tlabel;
NextButton: TBitmapImage;
F: String;
WizardFormImage: TBitmapImage;
//目录浏览框
dirviewImage: TBitmapImage;
//选择目录
dirCooseImage: TBitmapImage;
//自定义安装
zdyianZhuangImage: TBitmapImage; 
//快速安装
ksuanZhuangImage: TBitmapImage;
//返回
backBtn: TBitmapImage;

procedure BitmapImage1MouseLeave(Sender: TObject); forward;
procedure en(Sender: TObject); forward;

//安装细节
procedure ShowDetaBtnOnClick(Sender: TObject);
begin
ShowDetaBtn.Visible := False;
DetaList.Visible := True;
end;
//单击“取消”直接退出
procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
  Confirm := False;
end;

//关闭按钮
procedure CloseBtnOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X: Integer; Y: Integer);
begin
  CloseBtn.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Close3.bmp'));
end;

procedure CloseBtnOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X: Integer; Y: Integer);
begin
  CloseBtn.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Close2.bmp'));
end;

procedure CloseBtnOnMouseEnter(Sender: TObject);
begin
  CloseBtn.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Close2.bmp'))
end;

procedure CloseBtnOnMouseLeave(Sender: TObject);
begin
  CloseBtn.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Close1.bmp'));
end;

procedure CloseBtnOnClick(Sender: TObject);
begin
WizardForm.Close;
end;
//打开网站
//procedure baiduclick(Sender: TObject);
//begin
//ShellExec('open', 'http://www.baidu.com/', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
//end;
//procedure tbclick(Sender: TObject);
//begin
//ShellExec('open', 'http://www.taobao.com/', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
//end;

procedure setting(Sender: TObject);
begin
NextButton.Parent := WizardForm;
//setbcbtn.show
//setbtn.hide
NewLabel.hide
bigLabel.show
sversion.show
TaskBox1.show
//TaskBox2.show
TaskBox3.show
NewDirEdit.hide
TaskBox1Label.show
backBtn.Parent := WizardForm;
NewLabel.Caption := ExpandConstant('安装目录:');  //控件文字  '#13'
NewDirEdit.Caption:=WizardForm.DirEdit.Text;
if (Length(WizardForm.DirEdit.Text)>48) then
begin
    NewDirEdit.Caption:= Copy(WizardForm.DirEdit.Text,0,23)  + '...' +  Copy(WizardForm.DirEdit.Text,Length(WizardForm.DirEdit.Text)-20,20);
end;
TaskBox3Label.show
NewDirEdit.show
dirviewImage.show
NewLabel.show
NextButton.show
dirCooseImage.show
NewLabel.show
NewDirEdit.Show;
zdyianZhuangImage.Hide;
ksuanZhuangImage.Hide;
backBtn.Show;
WizardFormImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\window2.bmp'));
end;
//返回
procedure settingbcbtn(Sender: TObject);
begin
NextButton.show
//setbcbtn.hide
//setbtn.show
sversion.show
TaskBox1.hide
//TaskBox2.hide
TaskBox3.hide
TaskBox1Label.hide
//TaskBox2Label.hide
TaskBox3Label.hide
NextButton.hide;
dirviewImage.Hide;
NewLabel.hide;
NextButton.Hide;
dirCooseImage.Hide;
NewLabel.Hide;
NewDirEdit.hide;
zdyianZhuangImage.Show;
ksuanZhuangImage.Show;
backBtn.Hide;
WizardFormImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\window.bmp'));
end;
//浏览
procedure NewDirBrowseButtonClick(Sender: TObject);
begin
  WizardForm.DirBrowseButton.Click;
  NewDirEdit.Caption:=WizardForm.DirEdit.Text;
  if (Length(WizardForm.DirEdit.Text)>48) then
  begin
      NewDirEdit.Caption:= Copy(WizardForm.DirEdit.Text,0,23)  + '...' +  Copy(WizardForm.DirEdit.Text,Length(WizardForm.DirEdit.Text)-20,20);
  end;
end;

procedure TaskBox1LabelOnClick(Sender: TObject);
begin
if TaskBox1.Checked = False then
   TaskBox1.Checked := True
   else
   TaskBox1.Checked := False;
end;

procedure TaskBox2LabelOnClick(Sender: TObject);
begin
if TaskBox2.Checked = False then
   TaskBox2.Checked := True
   else
   TaskBox2.Checked := False;
end;

procedure TaskBox3LabelOnClick(Sender: TObject);
begin
if TaskBox3.Checked = False then
   TaskBox3.Checked := True
   else
   TaskBox3.Checked := False;
end;

procedure RunBox1LabelOnClick(Sender: TObject);
begin
if RunBox1.Checked = False then
   RunBox1.Checked := True
   else
   RunBox1.Checked := False;
end;

procedure RunBox2LabelOnClick(Sender: TObject);
begin
if RunBox2.Checked = False then
   RunBox2.Checked := True
   else
   RunBox2.Checked := False;
end;
procedure WizardFormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  ReleaseCapture
  SendMessage(WizardForm.Handle, WM_SYSCOMMAND, $F012, 0)
end;
//系统托盘
procedure TrayMenuItemOnClick(MenuItemIndex: Integer);
begin
// 下面 这句代码表示 WizardForm 有弹出对话框时禁止菜单点击事件
if not IsWindowEnabled(WizardForm.Handle) then exit;

Case MenuItemIndex of
  0: ToggleWizardVisible; // 因为 0 项菜单为默认菜单, 所以这里的事件除了菜单点击外, 双击图标也能触发.
  2: MainForm.ShowAboutBox;
  4: WizardForm.Close;
end;
end;

procedure TrayMenuOnPopup(PopMenu: LongWord; var bShow: Boolean);
begin
// 下面这一句的效果是如果 WizardForm 显示了对话框后,为了防止多重显示对话框,所以禁止了右键菜单
bShow := IsWindowEnabled(WizardForm.Handle);
// 这里是菜单弹出前的处理回调函数, 以下的作用是当 WziardForm 缩到托盘区的时候, 禁用 "About" 和 "Exit" 的菜单
if WizardFormInTray() then
begin
  EnableMenuItem(PopMenu, 2, MF_BYPOSITION or MF_GRAYED);
  EnableMenuItem(PopMenu, 4, MF_BYPOSITION or MF_GRAYED);
end else begin
  EnableMenuItem(PopMenu, 2, MF_BYPOSITION or MF_GRAYED);
  EnableMenuItem(PopMenu, 4, MF_BYPOSITION or MF_ENABLED);
end;
end;

 //安装按键
procedure en(Sender: TObject);
begin
WizardForm.NextButton.Click;
end;

procedure fdown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X: Integer; Y: Integer);
begin
  F:= ExpandConstant('{tmp}\btnIn3.bmp');
  NextButton.Bitmap.LoadFromFile(F);
end;
procedure fup(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X: Integer; Y: Integer);
begin
  F:= ExpandConstant('{tmp}\btnIn2.bmp');
  NextButton.Bitmap.LoadFromFile(F);
end;
procedure fs(Sender: TObject);
begin
  F:= ExpandConstant('{tmp}\btnIn2.bmp');
  NextButton.Bitmap.LoadFromFile(F);
end;

procedure BitmapImage1MouseLeave(Sender: TObject);
begin
  F:= ExpandConstant('{tmp}\btnIn1.bmp');
  NextButton.Bitmap.LoadFromFile(F);
end;

//浏览按键 btn_by2
procedure btn_bydown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X: Integer; Y: Integer);
begin
  F:= ExpandConstant('{tmp}\btn_by3.bmp');
  dirCooseImage.Bitmap.LoadFromFile(F);
end;
procedure btn_byup(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X: Integer; Y: Integer);
begin
  F:= ExpandConstant('{tmp}\btn_by2.bmp');
  dirCooseImage.Bitmap.LoadFromFile(F);
end;
procedure btn_bys(Sender: TObject);
begin
  F:= ExpandConstant('{tmp}\btn_by2.bmp');
  dirCooseImage.Bitmap.LoadFromFile(F);
end;

procedure btn_byMouseLeave(Sender: TObject);
begin
  F:= ExpandConstant('{tmp}\btn_by1.bmp');
  dirCooseImage.Bitmap.LoadFromFile(F);
end;

//自定义安装按钮 zdyianZhuangImage
procedure btn_ndown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X: Integer; Y: Integer);
begin
  F:= ExpandConstant('{tmp}\btn_n3.bmp');
  zdyianZhuangImage.Bitmap.LoadFromFile(F);
end;
procedure btn_nup(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X: Integer; Y: Integer);
begin
  F:= ExpandConstant('{tmp}\btn_n2.bmp');
  zdyianZhuangImage.Bitmap.LoadFromFile(F);
end;
procedure btn_nys(Sender: TObject);
begin
  F:= ExpandConstant('{tmp}\btn_n2.bmp');
  zdyianZhuangImage.Bitmap.LoadFromFile(F);
end;

procedure btn_nMouseLeave(Sender: TObject);
begin
  F:= ExpandConstant('{tmp}\btn_n1.bmp');
  zdyianZhuangImage.Bitmap.LoadFromFile(F);
end;

//快速安装
procedure btns_ndown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X: Integer; Y: Integer);
begin
  F:= ExpandConstant('{tmp}\btn_ss3.bmp');
  ksuanZhuangImage.Bitmap.LoadFromFile(F);
end;
procedure btns_nup(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X: Integer; Y: Integer);
begin
  F:= ExpandConstant('{tmp}\btn_ss2.bmp');
  ksuanZhuangImage.Bitmap.LoadFromFile(F);
end;
procedure btns_nys(Sender: TObject);
begin
  F:= ExpandConstant('{tmp}\btn_ss2.bmp');
  ksuanZhuangImage.Bitmap.LoadFromFile(F);
end;

procedure btns_nMouseLeave(Sender: TObject);
begin
  F:= ExpandConstant('{tmp}\btn_ss1.bmp');
  ksuanZhuangImage.Bitmap.LoadFromFile(F);
end;

//返回
procedure backBtn_ndown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X: Integer; Y: Integer);
begin
  F:= ExpandConstant('{tmp}\backBtn3.bmp');
  backBtn.Bitmap.LoadFromFile(F);
end;
procedure backBtn_nup(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X: Integer; Y: Integer);
begin
  F:= ExpandConstant('{tmp}\backBtn2.bmp');
  backBtn.Bitmap.LoadFromFile(F);
end;
procedure backBtn_nys(Sender: TObject);
begin
  F:= ExpandConstant('{tmp}\backBtn2.bmp');
  backBtn.Bitmap.LoadFromFile(F);
end;

procedure backBtn_nMouseLeave(Sender: TObject);
begin
  F:= ExpandConstant('{tmp}\backBtn1.bmp');
  backBtn.Bitmap.LoadFromFile(F);
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
if PageID=wpWelcome then
  result := true;
if PageID=wpFinished then
  result := true;
end;

procedure InitializeWizard();
begin
//WizardForm.Width:=482;
//WizardForm.Height:=302;
WizardForm.Width:=587;
WizardForm.Height:=437;
WizardForm.BorderStyle:=bsNone; //去边框
ExtractTemporaryFile('window.bmp');
ExtractTemporaryFile('window2.bmp');
ExtractTemporaryFile('Close1.bmp');
ExtractTemporaryFile('Close2.bmp');
ExtractTemporaryFile('Close3.bmp');
ExtractTemporaryFile('btnIn1.bmp');
ExtractTemporaryFile('btnIn2.bmp');
ExtractTemporaryFile('btnIn3.bmp');
ExtractTemporaryFile('installer.ico');
//按键
ExtractTemporaryFile('DirImg.bmp');
ExtractTemporaryFile('btn_by1.bmp');
ExtractTemporaryFile('btn_by2.bmp');
ExtractTemporaryFile('btn_by3.bmp');
ExtractTemporaryFile('btn_n1.bmp');
ExtractTemporaryFile('btn_n2.bmp');
ExtractTemporaryFile('btn_n3.bmp');
ExtractTemporaryFile('btn_ss1.bmp');
ExtractTemporaryFile('btn_ss2.bmp');
ExtractTemporaryFile('btn_ss3.bmp');
ExtractTemporaryFile('backBtn1.bmp');
ExtractTemporaryFile('backBtn2.bmp');
ExtractTemporaryFile('backBtn3.bmp');

WizardFormImage := TBitmapImage.Create(WizardForm);
WizardFormImage.Parent := WizardForm;
WizardFormImage.Align := alClient;  //图片拉伸
//WizardFormImage.SendToBack;  //显示底部横线
WizardFormImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\window.bmp'))
WizardFormImage.OnMouseDown:[email protected]; 
//透明
//SetWindowLong(WizardForm.Handle, GWL_EXSTYLE, GetWindowLong(WizardForm.Handle, GWL_EXSTYLE) or WS_EX_LAYERED)
//SetLayeredWindowAttributes(WizardForm.Handle, TransparentColor,(255 * TransparentPercent) / 100, LWA_COLORKEY)

//系统托盘
  Ico := LoadImage(0, ExpandConstant('{tmp}\face.ico'), IMAGE_ICON, 16, 16, LR_LOADFROMFILE);
  InitTrayIconCtrl(MainForm.Handle, WizardForm.Handle,
             WM_ICON_NOTIFY,   // 自定义自己的消息 ID, 以区分其他消息
             CustomMessage('Tooltip'),  // Tooltip 鼠标在 TrayIcon 图标上移动的时候显示的提示
             Ico,              // 这里默认使用安装程序图标
             True,             // 立即显示, 不用调用 ShowTrayIcon
             False,            // 不显示安装程序的任务栏按钮
             CustomMessage('MenuStrs'),               // 不建立托盘图标菜单
             0,               // 没有默认菜单项
             @TrayMenuItemOnClick,              // 没有菜单点击事件
             @TrayMenuOnPopup,              // 没有菜单弹出事件
             nil               // 没有自定义托盘图标事件
             );

  // 显示漫画型气泡提示
  ShowBalloon(CustomMessage('TooltipText'), CustomMessage('Tooltip'), NIIF_INFO, 10, False);

//关闭按钮
CloseBtn := TBitmapImage.Create(WizardForm);
CloseBtn.ShowHint := True;
CloseBtn.Cursor := crHand;
CloseBtn.OnMouseDown := @CloseBtnOnMouseDown;
CloseBtn.OnMouseUp := @CloseBtnOnMouseUp;
CloseBtn.OnMouseEnter := @CloseBtnOnMouseEnter;
CloseBtn.OnMouseLeave := @CloseBtnOnMouseLeave;
CloseBtn.Parent := WizardForm;
CloseBtn.Width := 22
CloseBtn.Height := 22
CloseBtn.Left := 454+108;
CloseBtn.Top := 3;
CloseBtn.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Close1.bmp'));
CloseBtn.OnClick:= @CloseBtnOnClick;

//自定义安装按钮
zdyianZhuangImage := TBitmapImage.Create(WizardForm);
zdyianZhuangImage.ShowHint := True;
zdyianZhuangImage.Cursor := crHand;
zdyianZhuangImage.Parent := WizardForm;
zdyianZhuangImage.Width := 91;
zdyianZhuangImage.Height := 14;
zdyianZhuangImage.Left := WizardForm.Width - 91 - 20;
zdyianZhuangImage.Top := WizardForm.Height - 30;
zdyianZhuangImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\btn_n1.bmp'));
zdyianZhuangImage.OnClick:[email protected];
zdyianZhuangImage.OnMouseDown := @btn_ndown;
zdyianZhuangImage.OnMouseUp:[email protected]_nup;
zdyianZhuangImage.OnMouseEnter := @btn_nys;
zdyianZhuangImage.OnMouseLeave := @btn_nMouseLeave;

//快速安装ksuanZhuangImage
ksuanZhuangImage := TBitmapImage.Create(WizardForm);
ksuanZhuangImage.ShowHint := True;
ksuanZhuangImage.Cursor := crHand;
ksuanZhuangImage.Parent := WizardForm;
ksuanZhuangImage.Width := 210;
ksuanZhuangImage.Height := 59;
ksuanZhuangImage.Left := (WizardForm.Width - 210)/2;
ksuanZhuangImage.Top := WizardForm.Height/3*2+20;
ksuanZhuangImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\btn_ss1.bmp'));
ksuanZhuangImage.OnClick:[email protected];
ksuanZhuangImage.OnMouseDown := @btns_ndown;
ksuanZhuangImage.OnMouseUp:[email protected]_nup;
ksuanZhuangImage.OnMouseEnter := @btns_nys;
ksuanZhuangImage.OnMouseLeave := @btns_nMouseLeave;

//安装按钮
NextButton := TBitmapImage.Create(WizardForm);
NextButton.ShowHint := True;
NextButton.Cursor := crHand;
//NextButton.Parent := WizardForm;
NextButton.Width := 95;
NextButton.Height := 30;
NextButton.Left := WizardForm.Width - 91 - 100;
NextButton.Top := WizardForm.Height -(16 + 30);
NextButton.Bitmap.LoadFromFile(ExpandConstant('{tmp}\btnIn1.bmp'));
NextButton.OnClick:= @en;
NextButton.OnMouseDown := @fdown;
NextButton.OnMouseUp:[email protected];
NextButton.OnMouseEnter := @fs;
NextButton.OnMouseLeave := @BitmapImage1MouseLeave;

//返回按钮
backBtn := TBitmapImage.Create(WizardForm);
backBtn.ShowHint := True;
backBtn.Cursor := crHand;
//backBtn.Parent := WizardForm;
backBtn.Width := 64;
backBtn.Height := 29;
backBtn.Left := NextButton.Left + 95 +10 ;
backBtn.Top := NextButton.Top;
backBtn.Bitmap.LoadFromFile(ExpandConstant('{tmp}\backBtn1.bmp'));
backBtn.OnClick:= @settingbcbtn;
backBtn.OnMouseDown := @backBtn_ndown;
backBtn.OnMouseUp:[email protected]_nup;
backBtn.OnMouseEnter := @backBtn_nys;
backBtn.OnMouseLeave := @backBtn_nMouseLeave;

                                                                                              
//setbtn := TLabel.Create(WizardForm);
//setbtn.Parent := WizardForm;
//setbtn.Font.Name := '微软雅黑';
//setbtn.Font.Size := 9
//setbtn.Font.Color := $0075FFDD;
//setbtn.Font.Style := [fsUnderline];
//setbtn.Transparent := True;
//setbtn.Cursor:= MyCursor2;
//setbtn.AutoSize := True;
//setbtn.WordWrap := True;
//setbtn.OnClick :[email protected];
//setbtn.Caption := ExpandConstant('高级选项');
//setbtn.SetBounds(ScaleX(20), ScaleY(WizardForm.Top + 120), 50, ScaleY(16));

//setbcbtn := TLabel.Create(WizardForm);
//setbcbtn.Parent := WizardForm;
//setbcbtn.Font.Name := '微软雅黑';
//setbcbtn.Font.Size := 9
//setbcbtn.Font.Color := $0075FFDD;
//setbcbtn.Font.Style := [fsUnderline];
//setbcbtn.Transparent := True;
//setbcbtn.Cursor:= MyCursor2;
//setbcbtn.AutoSize := True;
//setbcbtn.WordWrap := True;
//setbcbtn.OnClick :[email protected];
//setbcbtn.Caption := ExpandConstant('返回安装');
//setbcbtn.SetBounds(setbtn.left, setbtn.top, 50, ScaleY(16));

//WizardForm
WizardForm.OuterNotebook.Hide;
WizardForm.BeveledLabel.Width := 0
WizardForm.BeveledLabel.Height := 0
//CancelButton
WizardForm.CancelButton.Width:= 0
WizardForm.CancelButton.Height:= 0
//BackButton
WizardForm.BackButton.Width:= 0
WizardForm.BackButton.Height:= 0
//NextButton
WizardForm.NextButton.Width:= 0
WizardForm.NextButton.Height:= 0

//大标签
bigLabel := TLabel.Create(WizardForm);
bigLabel.Parent := WizardForm;
//bigLabel.Font.Name := '微软雅黑';
bigLabel.Font.Name := 'Microsoft YaHei';
bigLabel.Font.Size := 20
bigLabel.Font.Style := [fsBold];
bigLabel.Font.Color := clWhite;
bigLabel.Transparent := True;
bigLabel.AutoSize := True;
bigLabel.SetBounds(ScaleX(10), ScaleY(25), ScaleY(300), ScaleY(30));
bigLabel.Caption := '{#MyAppName} 安装包'
bigLabel.Show;

//安装版本
sversion := TLabel.Create(WizardForm);
sversion.Parent := WizardForm;
//sversion.Font.Name := '微软雅黑';
sversion.Font.Name := 'Microsoft YaHei';

sversion.Font.Size := 9
sversion.Font.Style := [fsBold];
sversion.Font.Color := clWhite;
sversion.Transparent := True;
sversion.AutoSize := False;
sversion.SetBounds(ScaleX(10), ScaleY(75), ScaleY(300), ScaleY(16));
//sversion.Caption := '安装版本:0001.0000.0001.0002'
sversion.Caption := '{#SversionCaption}';

//添加桌面快捷方式复选框
TaskBox1 := TCheckBox.Create(WizardForm);
TaskBox1.Parent := WizardForm;
TaskBox1.Left := (WizardForm.Width - 446 - 98)/2;
//TaskBox1.Top := ScaleY(413);
TaskBox1.Top := WizardForm.Height -(16 + 40)
TaskBox1.Width := ScaleY(13);
TaskBox1.Height := ScaleY(13);
TaskBox1.Checked := True;
TaskBox1Label := TLabel.Create(WizardForm);
TaskBox1Label.Parent := WizardForm; //位置
TaskBox1Label.Caption := '创建桌面快捷方式';  //控件文字  '#13'
TaskBox1Label.WordWrap := True;
TaskBox1Label.Font.Name := '宋体';
TaskBox1Label.Font.Size := 9  //字体大小
TaskBox1Label.Font.Color := $00000000; //控件文字颜色
TaskBox1Label.Font.Style := []
TaskBox1Label.Transparent := True; //控件透明显示
TaskBox1Label.Left := TaskBox1.Left + TaskBox1.Width + 3//ScaleX(0);
TaskBox1Label.Top := TaskBox1.Top + 1;
TaskBox1Label.Width := 100
TaskBox1Label.Height := TaskBox1.Height;
TaskBox1Label.OnClick := @TaskBox1LabelOnClick;

//--------------------------------------
//目录浏览框
dirviewImage := TBitmapImage.Create(WizardForm);
dirviewImage.ShowHint := True;
dirviewImage.Cursor := crHand;
dirviewImage.Parent := WizardForm;
dirviewImage.Width := 446
dirviewImage.Height := 36
dirviewImage.Left := TaskBox1.Left;
//dirviewImage.Top := WizardForm.Top -20;
dirviewImage.Top := WizardForm.Height -(16 + 130)
dirviewImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\DirImg.bmp'));

//浏览按钮
dirCooseImage := TBitmapImage.Create(WizardForm);
dirCooseImage.ShowHint := True;
dirCooseImage.Cursor := crHand;
dirCooseImage.Parent := WizardForm;
dirCooseImage.Width := 94;
dirCooseImage.Height := 36;
dirCooseImage.Left := dirviewImage.Left + 446;
dirCooseImage.Top := dirviewImage.Top;
dirCooseImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\btn_by1.bmp'));
dirCooseImage.OnClick:= @NewDirBrowseButtonClick;
dirCooseImage.OnMouseDown := @btn_bydown;
dirCooseImage.OnMouseUp:[email protected]_byup;
dirCooseImage.OnMouseEnter := @btn_bys;
dirCooseImage.OnMouseLeave := @btn_byMouseLeave;

//安装目录
NewLabel := TLabel.Create(WizardForm);
NewLabel.Parent := WizardForm;
NewLabel.Font.Name := '宋体';
NewLabel.Font.Size := 9
NewLabel.Font.Color := $00000000;
NewLabel.Font.Style := []
NewLabel.Transparent := True;
NewLabel.AutoSize := False;
NewLabel.WordWrap := True;
NewLabel.Left := dirviewImage.Left
NewLabel.Top := WizardForm.Height -(16 + 150)
NewLabel.Width := WizardForm.Width - ScaleX(40);
NewLabel.Height := ScaleY(14);

//文字路径
NewDirEdit:=TLabel.Create(WizardForm);
NewDirEdit.Parent:=WizardForm;
NewDirEdit.Transparent:=True;
NewDirEdit.Left:=30;
NewDirEdit.Top:=dirviewImage.top+9;
NewDirEdit.Font.Style := [fsBold];
//NewDirEdit.Font.Color := $0075FFDD;
NewDirEdit.Font.Color := $00000000;
//NewDirEdit.WordWrap := true;
NewDirEdit.Width:= 446;
//NewDirEdit.Cursor:= MyCursor2;
//NewDirEdit.OnClick := @NewDirBrowseButtonClick;
NewDirEdit.hide;

//添加开始菜单程序组快捷方式
TaskBox3 := TCheckBox.Create(WizardForm);
TaskBox3.Parent := WizardForm;
TaskBox3.Left := TaskBox1.Left;
TaskBox3.Top := TaskBox1.Top + 24;
TaskBox3.Width := TaskBox1.Width
TaskBox3.Height := TaskBox1.Height
TaskBox3.Checked := True;
TaskBox3Label := TLabel.Create(WizardForm);
TaskBox3Label.Parent := WizardForm; //位置
TaskBox3Label.Caption := '创建开始菜单程序组快捷方式';
TaskBox3Label.WordWrap := True;
TaskBox3Label.Font.Name := '宋体';
TaskBox3Label.Font.Size := 9  //字体大小
TaskBox3Label.Font.Color := $00000000; //控件文字颜色
TaskBox3Label.Font.Style := []
TaskBox3Label.Transparent := True; //控件透明显示
TaskBox3Label.Left := TaskBox3.Left + TaskBox3.Width + 3//ScaleX(0);
TaskBox3Label.Top := TaskBox3.Top + 1;
TaskBox3Label.Width := 100;
TaskBox3Label.Height := TaskBox3.Height;
TaskBox3Label.OnClick := @TaskBox3LabelOnClick;
//NewStatusLabel
NewStatusLabel := TLabel.Create(WizardForm);
NewStatusLabel.Parent := WizardForm;  //位置
NewStatusLabel.Font.Size := 9  //字体大小
NewStatusLabel.Font.Color := clWhite; //控件文字颜色
NewStatusLabel.Font.Style := []//[fsBold, fsItalic, fsUnderline];  //控件风格:粗体、斜体、下划线
NewStatusLabel.Transparent := True; //控件透明显示
NewStatusLabel.Left := 20
NewStatusLabel.Top := 275;
NewStatusLabel.Width := NewLabel.Width;
NewStatusLabel.Height := ScaleY(14);
//安装百分比
ProgressLabel := TLabel.Create(WizardForm);
ProgressLabel.Top := 255;
ProgressLabel.Left:= 20;
ProgressLabel.Font.Color :=clWhite;
ProgressLabel.AutoSize := True;
ProgressLabel.Transparent := True;
ProgressLabel.Parent := WizardForm;
//ProgressGauge
WizardForm.ProgressGauge.Left:=NewLabel.Left;
WizardForm.ProgressGauge.Top:=NewStatusLabel.Top + NewStatusLabel.Height + 5;
WizardForm.ProgressGauge.Width:=NewLabel.Width;
WizardForm.ProgressGauge.Height:=21
WizardForm.ProgressGauge.Min:=0
WizardForm.ProgressGauge.Max:=100
WizardForm.ProgressGauge.Parent := WizardForm;
//安装细节
//DetaList
DetaList := TNewListBox.Create(WizardForm);
DetaList.Parent := WizardForm;
DetaList.Left := 275;
DetaList.Top := 20;
DetaList.Width := NewLabel.Width;
DetaList.Height := ScaleY(188);
DetaList.TabOrder := ScaleY(4);
DetaList.Visible := False;  //  True默认不显示
DetaList.Color := $00FAF7F2 //细节框颜色
//ShowDetaBtn
ShowDetaBtn := TNewButton.Create(WizardForm);
ShowDetaBtn.Parent := WizardForm;
ShowDetaBtn.Left := DetaList.Left
ShowDetaBtn.Top := DetaList.Top;
ShowDetaBtn.Width := ScaleX(75);
ShowDetaBtn.Height := ScaleY(22);
ShowDetaBtn.Caption := '显示细节(&D)';
ShowDetaBtn.TabOrder := ScaleY(3);
ShowDetaBtn.Visible := True;  // False默认显示
ShowDetaBtn.OnClick := @ShowDetaBtnOnClick;
//FinishedLabel3
FinishedLabel3 := TLabel.Create(WizardForm);
FinishedLabel3.Parent := WizardForm;  //位置
FinishedLabel3.Caption := ExpandConstant('{cm:FinishedHeadingLabel}');  //控件文字  '#13'
FinishedLabel3.WordWrap := True;
FinishedLabel3.Font.Name := '宋体';
FinishedLabel3.Font.Size := 9  //字体大小
FinishedLabel3.Font.Color := clWhite; //控件文字颜色
FinishedLabel3.Font.Style := []//[fsBold, fsItalic, fsUnderline];  //控件风格:粗体、斜体、下划线
FinishedLabel3.Transparent := True; //控件透明显示
FinishedLabel3.Left := ScaleX(60);
FinishedLabel3.Top := ScaleY(100);
FinishedLabel3.Width := ScaleY(435);
FinishedLabel3.Font.Style := [fsBold];
FinishedLabel3.OnMouseDown:[email protected];
//程序1
RunBox1 := TCheckBox.Create(WizardForm);
RunBox1.Parent := WizardForm;
RunBox1.Left := FinishedLabel3.Left;
RunBox1.Top := FinishedLabel3.Top + FinishedLabel3.Height + ScaleY(30);
RunBox1.Width := ScaleY(13);
RunBox1.Height := ScaleY(13);
RunBox1.Checked := false//True;
RunBox1Label := TLabel.Create(WizardForm);
RunBox1Label.Parent := WizardForm; //位置
RunBox1Label.Caption := '立即启动酷狗7';  //控件文字  '#13'
RunBox1Label.WordWrap := True;
RunBox1Label.Font.Name := '宋体';
RunBox1Label.Font.Size := 9  //字体大小
RunBox1Label.Font.Color := clWhite; //控件文字颜色
RunBox1Label.Font.Style := []//[fsBold, fsItalic, fsUnderline];  //控件风格:粗体、斜体、下划线
RunBox1Label.Transparent := True; //控件透明显示
RunBox1Label.Left := RunBox1.Left + RunBox1.Width + 3//ScaleX(0);
RunBox1Label.Top := RunBox1.Top + 1;
RunBox1Label.Width := FinishedLabel3.Width - RunBox1.Width - 3;
RunBox1Label.Height := ScaleY(50);
RunBox1Label.OnClick := @RunBox1LabelOnClick;

dirviewImage.Hide;
NewLabel.hide;
NextButton.Hide;
dirCooseImage.Hide;
NewLabel.Hide;
end;

//安装细节
procedure AddToDetaList;
begin
NewStatusLabel.Caption := '抽取:  ' + ExtractFileName(CurrentFileName)  //仅显示文件名称
DetaList.Items.Append('抽取:  ' + ExtractFileName(CurrentFileName));
//滚动
DetaList.ItemIndex := DetaList.Items.Count - 1;
end;

function StatusMsg(MyMsg: string): Boolean;
begin
Result:= True;
NewStatusLabel.Caption:= MyMsg;
end;

procedure Progress();
begin
//安装百分比
ProgressLabel.Caption:= IntToStr((WizardForm.ProgressGauge.Position-WizardForm.ProgressGauge.Min)/((WizardForm.ProgressGauge.Max - WizardForm.ProgressGauge.Min)/101)) + '%';
if((WizardForm.ProgressGauge.Position-WizardForm.ProgressGauge.Min)/((WizardForm.ProgressGauge.Max - WizardForm.ProgressGauge.Min)/101)>=100) then
    begin
    ProgressLabel.Caption:= IntToStr(99) + '%';
    end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
//    Notice.hide

    NewLabel.hide
    TaskBox1.hide
    TaskBox1Label.hide
//    TaskBox2.hide
//    TaskBox2Label.hide
    TaskBox3.hide
    TaskBox3Label.hide
    NewStatusLabel.hide
    ProgressLabel.hide
    WizardForm.ProgressGauge.hide
    DetaList.hide
    ShowDetaBtn.hide
    FinishedLabel3.hide
    RunBox1.hide
    RunBox1Label.hide
    NextButton.hide
    //setbcbtn.hide
    NewDirEdit.hide
    bigLabel.hide
    sversion.hide
    //setbtn.hide
  if CurPageID = wpWelcome then
    begin
    WizardFormImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\window.bmp'))
//    Notice.show
    end;
  if CurPageID = wpSelectDir then
    begin
    WizardFormImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\window.bmp'))
    NextButton.show
    NewLabel.show
    NewLabel.Font.Style := [fsBold];
    TaskBox1.hide
    TaskBox1Label.hide
   //TaskBox2.hide
   // TaskBox2Label.hide
    TaskBox3.hide
    TaskBox3Label.hide
    NewDirEdit.show
    bigLabel.show
    sversion.show
    //setbtn.show
    end;
  if CurPageID = wpInstalling then
    begin
    WizardFormImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\window.bmp'))
    NewStatusLabel.show
    ProgressLabel.show
    WizardForm.ProgressGauge.hide
    ShowDetaBtn.hide
    bigLabel.show
    sversion.show
    //---------------
    //目录浏览框
    dirviewImage.Hide;
    //选择目录
    dirCooseImage.Hide;
    //自定义安装
    zdyianZhuangImage.Hide;
    //快速安装
    ksuanZhuangImage.Hide;
    //返回
    backBtn.Hide;
    end;
    if CurPageID = wpFinished then
    begin
    WizardFormImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\window.bmp'))
    FinishedLabel3.show
    RunBox1.show
    RunBox1Label.show
    end;
end;

//快捷方式
Function desktopicon(): Boolean;
begin
  if TaskBox1.Checked = True then     //当TaskBox1选中时,执行操作
  Result := TaskBox1.Checked;
  
end;

Function quicklaunchicon(): Boolean;
begin
  if TaskBox2.Checked = True then     //当TaskBox2选中时,执行操作
  Result := TaskBox2.Checked;
end;

Function groupicon(): Boolean;
begin
  if TaskBox3.Checked = True then     //当TaskBox3选中时,执行操作
  Result := TaskBox3.Checked;
end;

procedure DeinitializeSetup();
begin
MainForm.Hide;
WizardForm.Hide;
UninitTrayIconCtrl();
end;

//安装结束,点"完成"之后运行程序
//procedure CurStepChanged(CurStep: TSetupStep);
//var
//RCode: Integer;
//begin
////程序1
//if (CurStep=ssDone) and (RunBox1.Checked) then
//Exec(ExpandConstant('{app}\MyProg.exe'), '', '', SW_SHOW, ewNoWait, RCode);
////程序2
////if (CurStep=ssDone) and (RunBox2.Checked) then
////Exec(ExpandConstant('{app}\MyProg.exe'), '', '', SW_SHOW, ewNoWait, RCode);
//end;

一些需要注意的地方:

1、inno setup 的版本是否支持字体不同分辨率的适配。

2、在非中文系统上是否会造成乱码。

3、360是否会报毒或者高风险。

4、覆盖安装的时候是否提示。

5、是否允许同时允许多个安装包。

6、安装时如果程序正在运行要进行提示。

时间: 2024-10-09 22:52:21

一个相对完整的inno setup的相关文章

一个比较完整的Inno Setup 安装脚本

一个比较完整的Inno Setup 安装脚本,增加了对ini文件设置的功能,一个安装包常用的功能都具备了. 1 [Setup] 2 ; 注: AppId的值为单独标识该应用程序. 3 ; 不要为其他安装程序使用相同的AppId值. 4 ; (生成新的GUID,点击 工具|在IDE中生成GUID.) 5 AppId={{A9861883-31C5-4324-BD9A-DC3271EEB675} 6 ;程序名 7 AppName=ISsample 8 ;版本号 9 AppVerName=ISsamp

一个比较完整的Inno Setup 安装脚本(转)

一个比较完整的Inno Setup 安装脚本,增加了对ini文件设置的功能,一个安装包常用的功能都具备了.   [Setup] ; 注: AppId的值为单独标识该应用程序. ; 不要为其他安装程序使用相同的AppId值. ; (生成新的GUID,点击 工具|在IDE中生成GUID.) AppId={{A9861883-31C5-4324-BD9A-DC3271EEB675} ;程序名 AppName=ISsample ;版本号 AppVerName=ISsample 1.0.0.0 ;发布者名

inno setup介绍及官方网站地址

使 用 笔 记 1.Inno Setup 是什么?Inno Setup 是一个免费的 Windows 安装程序制作软件.第一次发表是在 1997 年,Inno Setup 今天在功能设置和稳定性上的竞争力可能已经超过一些商业的安装程序制作软件.关键功能:★ 支持现在所有正在使用的 32 位 Windows 版本: Windows 95,98,2000,Server 2003,XP,Me,NT 4.0 (不需要服务包). ★ 支持创建单个 EXE 格式的安装程序,使你的程序可以很方便地在网络上发表

一键搞定Java桌面应用安装部署 —— exe4j + Inno Setup 带着JRE, 8M起飞

转载自:http://www.blogjava.net/huliqing/archive/2008/04/18/193907.html 对于作Java桌面应用来说,比较烦人的就是安装部署问题,客户端是否安装有jre.jre版本问题.jre去哪下载.如何用jre启动你的Java应用?不要说刚接触电脑的人,就算是比较熟悉电脑,如果没有接触过Java,面对一个Java应用,如何在Windows下启动它,估计都会折腾半天.如果不是因为这个问题,Java在我的眼里算是最完美的语言了,也是我最喜爱的语言.

使用Inno Setup 打包jdk、mysql、tomcat、webapp等为一个exe安装包

之前一直都没涉及到打包安装方面的东西,都是另一个同事负责的,使用的工具(installshield)也比较高大上一点,可是后来他离职以后接受的同事也只能是在这个基础上做个简单的配置,然后打包,可是现在做的项目和原来的完全不一样以后就不能使用之前的了,只能是自己硬着头皮来弄个比较简单快捷的了. 切入正题,如标题所述使用inno setup来打包一个java web 相关的内容为一个exe,.net web类似,这个工具可以在网上直接找到下载,有汉化版的,并且里面也有帮助手册可以参考.把里面的一些敏

使用Inno Setup 打包jdk、mysql、tomcat、webapp等为一个exe安装包(转)

之前一直都没涉及到打包安装方面的东西,都是另一个同事负责的,使用的工具(installshield)也比较高大上一点,可是后来他离职以后接受的同事也只能是在这个基础上做个简单的配置,然后打包,可是现在做的项目和原来的完全不一样以后就不能使用之前的了,只能是自己硬着头皮来弄个比较简单快捷的了. 切入正题,如标题所述使用inno setup来打包一个java web 相关的内容为一个exe,.net web类似,这个工具可以在网上直接找到下载,有汉化版的,并且里面也有帮助手册可以参考.把里面的一些敏

一个简单的inno setup模板

一.模板代码 基本功能包括多路径安装.多语言.自定义图标. [Setup] ShowLanguageDialog=yes AppCopyright=Copyright Reserved(C) 2016, 360 Inc. AppName={cm:Packagename} AppVerName={cm:Packagename} {cm:Packagever} LicenseFile= OutputDir=C:/installer UninstallFilesDir={code:getdlldir}

Inno Setup怎样创建一个自动申请管理员身份运行的快捷

如果你使用的是 Unicode 版本的 Inno Setup,那么以下是更为专业的解决方法. 这是 mlaan 提及的再一种方法. QUOTE( CodeAutomation3.iss) ; -- CodeAutomation2.iss -- ; ; This script shows how to use IUnknown based COM Automation objects. ; ; REQUIRES UNICODE INNO SETUP! ; ; Note: some unneeded

使用inno setup打包程序完整脚本(.net框架检测,重复安装检测)

; 脚本由 Inno Setup 脚本向导 生成!; 有关创建 Inno Setup 脚本文件的详细资料请查阅帮助文档! #define MyAppName "小小鸟软件"#define MyAppVersion "2012.2.29"#define MyAppPublisher "小小鸟科技"#define MyAppURL "http://www.cnblogs.com/IT-SmallBird/"#define MyAp