Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно
MKN MKN вне форума

Ветеран


Сообщения: 2355
Благодарности: 557

Профиль | Отправить PM | Цитировать


COMPONENTSPAGE и PAGE_DIRECTORY на одной стандартной странице.

Такое сочетание более практично и удобно, чем раздельное листание страниц (хотя лучше это делать с помощью nsDialogs )

Код: Выделить весь код
!AddPluginDir .
!include "MUI2.nsh"
!define SHACF_FILESYSTEM      0x00000001
!define EN_CHANGE             0x0300

Name "COMPONENTS_PAGE_DIRECTORY"
OutFile "COMPONENTS_PAGE_DIRECTORY.exe"
InstallDir $TEMP
ShowInstDetails show

!define MUI_COMPONENTSPAGE_NODESC
; correct modern_nodesc.exe
!define MUI_UI_COMPONENTSPAGE_NODESC myui.exe

!define MUI_PAGE_CUSTOMFUNCTION_SHOW DirPageShow
!insertmacro MUI_PAGE_DIRECTORY 
!define MUI_PAGE_CUSTOMFUNCTION_SHOW HideBack 
!insertmacro MUI_PAGE_LICENSE ${__FILE__}  
!define MUI_COMPONENTSPAGE_TEXT_INSTTYPE $(^DirBrowseText) 
!define MUI_PAGE_CUSTOMFUNCTION_SHOW ComPageShow
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "English"

Function DirPageShow
	FindWindow $1 "#32770" "" $HWNDPARENT
	System::Call User32::GetWindowLong(ir1,i4)i.R0
	SendMessage $HWNDPARENT 0x408 1 0
FunctionEnd

Function HideBack
	GetDlgItem $0 $HWNDPARENT 3
	ShowWindow $0 ${SW_HIDE}
FunctionEnd

Function ComPageShow
	FindWindow $1 "#32770" "" $HWNDPARENT
	GetFunctionAddress $0 onComPageCallback
    WndProc::onCallback /r=1 $1 $0
  	GetDlgItem $0 $1 1001
	SendMessage $0 ${WM_SETTEXT} 0 "STR:$(^BrowseBtn)"
	GetDlgItem $0 $1 1007
	SendMessage $0 ${WM_SETTEXT} 0 "STR:$(^DirText)"
	GetDlgItem $0 $1 1020
	SendMessage $0 ${WM_SETTEXT} 0 "STR:$(^DirSubText)"
	GetDlgItem $0 $1 1019
	SendMessage $0 ${WM_SETTEXT} 0 "STR:$INSTDIR"
	System::Call `shlwapi::SHAutoComplete(ir0,i${SHACF_FILESYSTEM})`
FunctionEnd

Function onComPageCallback
    ${If} $2 = ${WM_COMMAND}
    IntOp $5 $3 & 0x0000FFFF
    IntOp $6 $3 >> 16
    IntOp $6 $6 & 0x0000FFFF
    ${If} $6 = ${EN_CHANGE}
    ${AndIf} $5 = 1019
    System::Call User32::GetDlgItemText(ir1,i1019,t.d,i${NSIS_MAX_STRLEN})
    ${EndIf}
    System::Call User32::CallWindowProc(iR0,ir1,ir2,ir3,ir4)
	${EndIf}
FunctionEnd

Section "Components" Main
SectionIn RO
SectionEnd

Section /o "Component1" Sec01
DetailPrint "Component 1"
SectionEnd

Section "Component 2" Sec02
DetailPrint "Component 2"
SectionEnd
myui.exe - подкорректированный modern_nodesc.exe
WndProc.dll - плагин

комплект во вложении :

Последний раз редактировалось MKN, 27-05-2020 в 16:17.

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:42, 24-06-2014 | #1221