Complete el cuadro de texto del directorio en el botón Haga clic en el instalador MUI NSI, utilizando el complemento de Buttonevent

StackOverflow https://stackoverflow.com/questions/5803182

Pregunta

He agregado el botón personalizado usando el hacker de recursos en la página del directorio MUI del instalador, ahora quiero que cuando se haga clic en el botón, luego el cuadro de texto predeterminado donde el usuario ingresa a InstallDir (la ruta donde está instalada la aplicación), se llena con algunos texto especificado. por favor ayúdame con el código?

Estoy usando el complemento Buttonevent, pero no sé qué código escribir en el controlador de eventos. Actualmente solo estoy mostrando un cuadro de mensaje cuando se hace clic en el botón para asegurarse de que el evento esté funcionando. Por favor ayuda.

!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

------------------------ NUEVA parte editada-- Código para tres botones personalizados ---------------- ---

!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
¿Fue útil?

Solución

No dijo qué versión del MUI que está utilizando, esta macro debería manejar ambos ...

!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"
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top