2011-04-27 13 views
0

我已经在安装程序的MUI目录页面上添加了使用Resource Hacker的自定义按钮,现在我希望当按钮被单击时默认文本框在哪里用户输入InstallDir(安装应用程序的路径),填充一些指定的文本。请帮助我的代码?在按钮上填充目录文本框在MUI NSI安装程序中单击使用ButtonEvent插件

我正在使用ButtonEvent插件,但我不知道在事件处理程序中写什么代码。目前我只是在点击按钮时显示一个消息框,以确保事件正常。 请帮忙。

!define IDC_BUTTON_SETPATH 1200 (1200 is the ID OF THE BUTTON ADDED from Resource hacker) 

;Pages 

    !insertmacro MUI_PAGE_WELCOME 

    !define MUI_PAGE_CUSTOMFUNCTION_SHOW DirectoryShow 
    !define MUI_PAGE_CUSTOMFUNCTION_LEAVE DirectoryLeave 

    !insertmacro MUI_PAGE_DIRECTORY 

!insertmacro MUI_PAGE_COMPONENTS 
!insertmacro MUI_PAGE_INSTFILES 
!insertmacro MUI_PAGE_FINISH 

;-------------------------------- 

Function buttonclicked 
    MessageBox MB_OK|MB_ICONEXCLAMATION "You Clicked Me " 

    Abort 

FunctionEnd 

# Occurs on installer UI initialization. 
Function myGuiInit 

    # Create event handler for our parent window button. 
    GetFunctionAddress $R3 buttonclicked 
    ButtonEvent::AddEventHandler ${IDC_BUTTON_SETPATH} $R3 

FunctionEnd 

------------------------编辑后的新PART-- CODE FOR THREE自定义按钮-------- -----------

!include MUI2.nsh 
; -------------------------------------------------- 

    !define IDC_BUTTON_CDRIVEPATH   1200 
    !define IDC_BUTTON_DDRIVEPATH   1201 
    !define IDC_BUTTON_EDRIVEPATH   1202 

; -------------------------------------------------- 

# The event handler for our parent button is added in MyGUIInit. 
!define MUI_CUSTOMFUNCTION_GUIINIT myGuiInit 
    !define MUI_HEADERIMAGE 
    !define MUI_HEADERIMAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Header\pksicon.bmp" ; optional 
    !define MUI_WELCOMEFINISHPAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Wizard\pksleftimage.bmp" ; 
;-------------------------------- 


XPStyle on 


;Interface Settings 

    !define MUI_ABORTWARNING 

;-------------------------------- 
;Pages 

    !insertmacro MUI_PAGE_WELCOME 
    !insertmacro MUI_PAGE_LICENSE "${NSISDIR}\Docs\Modern UI\licensefile.txt" 
!define MUI_PAGE_CUSTOMFUNCTION_SHOW DirectoryShow 

    !insertmacro MUI_PAGE_DIRECTORY 
!insertmacro MUI_PAGE_COMPONENTS 
!insertmacro MUI_PAGE_INSTFILES 
!insertmacro MUI_PAGE_FINISH 

; -------------------------------------------------- 

; Languages. 

!insertmacro MUI_LANGUAGE English 

; -------------------------------------------------- 


!macro SetDirPageInstallDir text 
!if "${MUI_SYSVERSION}" < "2.0" 
Push $0 
FindWindow $0 "#32770" "" $HWNDPARENT 
GetDlgItem $0 $0 0x3FB 
SendMessage $0 ${WM_SETTEXT} 0 "STR:${text}" 
Pop $0 
!else 
SendMessage $mui.DirectoryPage.Directory ${WM_SETTEXT} 0 "STR:${text}" 
!endif 
!macroend 


# Called when the CDRIVEPATH button is pressed. 
Function CDRIVEPATH 

    MessageBox MB_OK|MB_ICONEXCLAMATION "The Software will be installed in : C:\ " 

;In buttonclicked handler 
!insertmacro SetDirPageInstallDir "C:\" 

FunctionEnd 
;-------------------------------- 

Function DDRIVEPATH 

    MessageBox MB_OK|MB_ICONEXCLAMATION "The Software will be installed in : D:\ " 

;In buttonclicked handler 
!insertmacro SetDirPageInstallDir "D:\" 

FunctionEnd 
;-------------------------------- 
Function EDRIVEPATH 

    MessageBox MB_OK|MB_ICONEXCLAMATION "The Software will be installed in : E:\ " 

;In buttonclicked handler 
!insertmacro SetDirPageInstallDir "E:\" 

FunctionEnd 
;-------------------------------- 

InstallDir $INSTDIR 


# Occurs on installer UI initialization. 
Function myGuiInit 

    # Create event handler for our parent window button. 
    GetFunctionAddress $R0 CDRIVEPATH 
    ButtonEvent::AddEventHandler ${IDC_BUTTON_CDRIVEPATH} $R0 

; GetFunctionAddress $R1 EDRIVEPATH **-----this line causes error** 
; ButtonEvent::AddEventHandler ${IDC_BUTTON_DDRIVEPATH} $R1 -----this line causes error 

; GetFunctionAddress $R2 EDRIVEPATH **-----this line causes error** 
; ButtonEvent::AddEventHandler ${IDC_BUTTON_EDRIVEPATH} $R2 -----this line causes error 



FunctionEnd 

;------------------------------------------------ 

# Occurs on Directory page show. 
Function DirectoryShow 

    # Create event handler for our Directory page button. /NOTIFY makes 
    # the button move to the next page when clicked. 
    ButtonEvent::AddEventHandler ${IDC_BUTTON_CDRIVEPATH} 

    ButtonEvent::AddEventHandler ${IDC_BUTTON_DDRIVEPATH} 

    ButtonEvent::AddEventHandler ${IDC_BUTTON_EDRIVEPATH} 


    # Disable next button. 
    GetDlgItem $R0 $HWNDPARENT 1 
    EnableWindow $R0 0 


FunctionEnd 


; -------------------------------------------------- 

;General 

    ;Name and file 
Name NEW_FILL_TEXTBOX_BUTTONCLICK 
OutFile NEW_FILL_TEXTBOX_BUTTONCLICK.exe 


Section 

    DetailPrint "SUCCESSFULLY INSTALLED" 

SectionEnd 

回答

1

你没有说你正在使用,该宏应该处理这两者的MUI版本...

!macro SetDirPageInstallDir text 
!if "${MUI_SYSVERSION}" < "2.0" 
Push $0 
FindWindow $0 "#32770" "" $HWNDPARENT 
GetDlgItem $0 $0 0x3FB 
SendMessage $0 ${WM_SETTEXT} 0 "STR:${text}" 
Pop $0 
!else 
SendMessage $mui.DirectoryPage.Directory ${WM_SETTEXT} 0 "STR:${text}" 
!endif 
!macroend 


;In buttonclicked handler 
!insertmacro SetDirPageInstallDir "$programfiles\Hello World" 
+0

非常感谢先生,但是当我使用2或3个自定义按钮时,当我运行安装程序时,它会自动退出,其中的对话框页面自定义按钮不得不出现。我已经在我的帖子的编辑部分发布了新代码 – sqlchild 2011-04-28 09:53:09

+0

@sqlchild:我从来没有使用过这个插件,但是在myGuiInit和DirectoryShow中添加按钮并不适合我。要获得更多的信息,你应该问在nsis论坛上的插件作者或维基上的插件谈话页面... – Anders 2011-04-28 11:11:30

+0

好的SIR,所以这是一个ButtonEvent插件的问题?你的代码工作成功时,我只有一个单一的定制按钮,我的对话框,并使用ButtonEvent插件,那么它工作正常。 – sqlchild 2011-04-28 11:48:50

相关问题