Füllen Sie das Textfeld für Verzeichnisse auf der Schaltfläche Klicken Sie in Mui NSI-Installationsprogramm mit dem Buttonevent-Plug-In
-
24-10-2019 - |
Frage
Ich habe eine benutzerdefinierte Schaltfläche mit dem Ressourcenhacker auf der MUI -Verzeichnisseite des Installationsprogramms hinzugefügt. Jetzt möchte ich, dass beim Klicken der Schaltfläche das Standardtextfeld, in dem der Benutzer in den InstallDir (der Pfad, in dem die Anwendung installiert ist), mit einigen füllt, mit einigen füllt, gefüllt ist, wird mit einigen gefüllt angegebener Text. Bitte helfen Sie mir mit dem Code?
Ich verwende das Buttonevent-Plug-In, aber ich weiß nicht, welchen Code ich im Event-Handler schreiben soll. Derzeit zeige ich gerade ein Meldungsfeld an, wenn die Schaltfläche klickt, um sicherzustellen, dass das Ereignis funktioniert. Bitte helfen Sie.
!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
------------------------ Neu bearbeitete Teil-Code für drei benutzerdefinierte Schaltflächen ---------------- ---
!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
Lösung
Sie haben nicht gesagt, welche Version des MUI, das Sie verwenden, dieses Makro sollte beide verarbeiten ...
!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"