NSIS 的 Modern UI 教程(二)
生活随笔
收集整理的這篇文章主要介紹了
NSIS 的 Modern UI 教程(二)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
NSIS 的 Modern UI 教程(二)
[ 2008-02-24 20:22:20 | 作者:?陳敏毅?] http://chenmy.hanzify.org/article.asp?id=51字體大小:?大?|?中?|?小 (前面部分)
InstallOptions 和定制頁面
InstallOptions 是一個 NSIS 插件,他能讓安裝程序開發人員創建定制的向導頁面來獲得內置向導頁面不能提供的用戶輸入。
InstallOptions 會創建內嵌在 NSIS 窗體中的對話框。InstallOptions 的控件用 INI 文件描述。該文件可以用可視化工具生成。HM NIS EDIT 就是這樣的一個工具。
InstallOptions 控件 INI 文件的結構
InstallOptions INI 文件包含一個必須的段。它包含了控件的數量、窗體的屬性等。該文還可包含描述具體空間的段。
必須的段是 Settings,它可以包含以下內容:
NumFields(必須的) 該對話框包含的控件數目
Title (可選的) Windows窗體的標題
CancelEnabled (可選的) 是否啟用Cancel按鈕,1:是,0:否
CancelShow (可選的) 是否顯示Cancel按鈕,1:是,0:否
BackEnabled (可選的) 是否啟用Back按鈕,1:是,0:否
CancelButtonText (可選的) Cancel按鈕的顯示文字
NextButtonText (可選的) Next按鈕的顯示文字
BackButtonText (可選的) Back按鈕的顯示文字
Rect (可選的)
RTL (可選的)
State (output) This is not something you have to supply yourself but is set by InstallOptions, before calling your custom page validation function, to the field number of the custom Button control (or other control having the Notify flag) the user pressed, if any.
每個控件段以"Field #"模式命名,井號表示數字,從1開始。控件有以下屬性:
Type (required) 控件的類型,有"Label", "Text", "Password", "Combobox", "DropList", "Listbox", "CheckBox", "RadioButton", "FileRequest" , "DirRequest" "Icon", "Bitmap", "GroupBox", "Link" 或 "Button"。
"Label" 用來顯示靜態文本
"Text" 和 "Password" 和 HTML 中的類似,用來接受用戶輸入。
"Combobox"允許用戶輸入列表中不存在的項, "Droplist" 則只能選擇列表中規定的項。
"Listbox" 顯示多個選項(不用下拉即可看到),并允許多選
"CheckBox" "RadioButton" 和 Windows中的相應控件類似。
"FileRequest" 顯示一個輸入框和瀏覽按鈕,允許用戶用文件選擇對話框選取文件。
"DirRequest" 和 "FileRequest" 類似,但只選取到目錄。
"Icon" 顯示圖標
"Bitmap" 顯示位圖
"GroupBox" 顯示組合框
"Link" 顯示超鏈
"Button" 按鈕
Text (可選的) 對 checkbox,radio button 控件是 caption;對 DirRequest 控件是瀏覽對話框的標題;對圖標,位圖控件是圖像文件的的路徑。
State (可選的) 控件狀態,該狀態可以在 nsi 腳本讀取。對于文本類型的控件,state 的值是用戶輸入的字符串。對于 radio button 和 check boxes state 為'0'或'1'。對 list boxes, combo boxes 和 drop lists 狀態值是選中的選項,如果有多個則用管道符號'|'分割。 對于超鏈和按鈕 State 是可以用 ShellExecute 執行的字符串。
ListItems (可選的) combobox, droplist, 或 listbox的選項,選項之間用管道符號'|'分割
MaxLen (可選的) 最大輸入長度
MinLen (可選的) 最小輸入長度
ValidateText (可選的) 校驗文本
Left
Right
Top
Bottom (required) 控件坐標,在可視化環境中不重要。
Filter (可選的) 指定 "FileRequest" 控件的文件過濾器,模式如 文本文件|*.txt|程序文件|*.exe;*.com|所有文件|*.*
Root (可選的) 指定"DirRequest" 控件的根目錄
Flags (可選的) 指定控件的修飾。多個值用管道符號'|'分割且不能有空格。有效的值如下:
Value Meaning
REQ_SAVE 將 "FileRequest" 控件變成 "另存為" 對話框
FILE_MUST_EXIST 用于 "FileRequest" 控件,規定所選文件是否必須存在
FILE_EXPLORER 用于 "FileRequest" 控件
FILE_HIDEREADONLY 用于 "FileRequest" 控件,隱藏 "open read only"checkbox
WARN_IF_EXIST 用于 "FileRequest" 控件,顯示警告如果文件已存在
PATH_MUST_EXIST 用于 "FileRequest" 控件,規定輸入的路徑必須存在
PROMPT_CREATE 用于 "FileRequest" 控件,在創建之前顯示警告如果文件或路徑不存在
RIGHT 用于"Checkbox"和Radiobutton"控件,規定文字出現在左邊,很少用
MULTISELECT 用于"Listbox"控件允許多選
EXTENDEDSELCT 用于"Listbox"控件允許多選
RESIZETOFIT 用于"Bitmap"控件,將圖片擴大到控件的大小
GROUP 多個控件分組,該標志放在同組的第一個控件上。
NOTABSTOP 禁止tab鍵焦點落在該控件上
DISABLED 禁用控件
ONLY_NUMBERS 用于"Text"控件,Forces the user to enter only numbers into the edit box.
MULTILINE 用于"Text"控件,允許多行輸入
WANTRETURN 用于"Text"控件,允許多行輸入,規定按下Enter鍵時插入回車
NOWORDWRAP 用于"Text"控件,允許多行輸入禁用word-wrap
HSCROLL 顯示水平方向的滾動條
VSCROLL 顯示垂直方向的滾動條
READONLY 用于"Text"控件,使文本輸入框變成只讀
NOTIFY 用于"Button", "Link", "CheckBox", "RadioButton", "ListBox"和"DropList"控件。使InstallOptions觸發事件,調用定制頁面的validation/leave方法。
TxtColor (可選的) 用于"Link"控件,指定文本的前景色,格式為: 0xBBRRGG (十六進制)
使用定制向導頁的步驟:
1. 設計定制向導頁界面,產生界面描述ini文件,可以使用HM NIS Edit的可視化工具簡化開發
2. 編寫nsi腳本:
首先,如果使用了lzma,gzip等壓縮算法,需要在所有File指令前reserve定制界面的ini文件:ReserveFile ".ini"。
然后,在.onInit方法中使用宏!insertmacro MUI_INSTALLOPTIONS_EXTRACT ".ini"。
接著,編寫定制對話框的顯示函數。
最后,用Page指令在合適的位置插入該向導頁面。
定制對話框顯示函數的示例:
Function setChooseBuildArea
!insertmacro MUI_HEADER_TEXT "請選擇構建目錄" "請選擇構建目錄"
!insertmacro MUI_INSTALLOPTIONS_WRITE "buildarea.ini" "Field 2" "State" "$INSTDIR\buildarea"
!insertmacro MUI_INSTALLOPTIONS_DISPLAY "buildarea.ini"
FunctionEnd
該函數的第一行代碼設置向導頁面的頭上的文字;第二行代碼設置向導頁面第二個控件的State為"$INSTDIR\buildarea",也就是設置該控件的默認值;第三行代碼顯示對話框。
用Page指令插入向導頁的代碼如下:
Page custom setChooseBuildArea "" "--選擇構建目錄"
該指令接受三個參數,前兩個是該頁面的顯示函數和離開函數,第三個是顯示在標題欄的文字。
nsi的變量如果存放字符串的話,默認只能保存1024。對于復雜的Java應用,由于需要設置Classpath其命令行的長度往往會超過1024。此時,必須讓nsi的變量支持大于1024的字符串長度。有兩種方法解決此問題,一個是到http: //nsis.sourceforge.net/download/specialbuilds/處下載Special Builds,目前一個稱為Large strings的build支持可以存放8192個字符的變量;另外一個就是手工編譯NSIS的源代碼,加上需要的選項。
(完了)
總結
以上是生活随笔為你收集整理的NSIS 的 Modern UI 教程(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NSIS 的 Modern UI 教程(
- 下一篇: VC++6.0使用GDI++出现'ULO