Цитата K.A.V.:
Думаете я просто так... »
|
И в мыслях не было морочить вам голову!
Ниже приведены сценарии, которые можно сразу скомпилировать и посмотреть результат. Так сказать, работа над ошибками

В первом я объединил два совета
K.A.V. для branding-текста и текста описания компонентов.
Т.е. цвет branding-текста, текста подсказки и текстов описания компонентов становится красным, стили текстов отключаются.
Скрипт от
K.A.V.
читать дальше »
Код:

;Variant by K.A.V..nsh
!include "mui.nsh"
!include "nsDialogs.nsh"
!define NSD_RemoveStyle "!insertmacro _NSD_RemoveStyle_Call"
!macro _NSD_RemoveStyle_Call CONTROL EXSTYLE
Push `${CONTROL}`
Push `${EXSTYLE}`
System::Store SR1R0
IntOp $R1 $R1 ~
System::Call `user32::GetWindowLong(iR0,i${GWL_STYLE})i.R2`
IntOp $R2 $R1 & $R2
System::Call `user32::SetWindowLong(iR0,i${GWL_STYLE},iR2)`
System::Store L
!macroend
!insertmacro MUI_PAGE_WELCOME
!define MUI_PAGE_CUSTOMFUNCTION_PRE RemoveDISABLEDStyle ; команда отключения стиля для BRANDING.
!insertmacro MUI_PAGE_LICENSE "${NSISDIR}\Docs\Modern UI\License.txt"
!define MUI_PAGE_CUSTOMFUNCTION_SHOW RemoveDISABLEDStyle_Description ; отключение стиля описания
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "Russian"
BrandingText "Nullsoft Scriptable Install System"
Name "'Variant by K.A.V.'"
OutFile "kav.exe"
InstallDir "$TEMP"
Section "Первая секция"
SectionEnd
Section "Вторая секция"
SectionEnd
Function RemoveDISABLEDStyle
GetDlgItem $0 $HWNDPARENT 1028
${NSD_RemoveStyle} $0 0x08000000L
SetCtlColors $0 "0xFF0000" transparent ; Красный цвет текста
FunctionEnd
Function .onMouseOverSection
FindWindow $R0 "#32770" "" $HWNDPARENT
GetDlgItem $R0 $R0 1043
StrCmp $0 -1 "" +2
SendMessage $R0 ${WM_SETTEXT} 0 "STR:$(MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO)" ; текст
; "Наведите курсор мыши на название компонента, чтобы прочесть его описание."
; в зависимости от языка графического интерфейса
StrCmp $0 0 "" +2
SendMessage $R0 ${WM_SETTEXT} 0 "STR:Описание первой секции"
StrCmp $0 1 "" +2
SendMessage $R0 ${WM_SETTEXT} 0 "STR:Описание второй секции"
FunctionEnd
Function RemoveDISABLEDStyle_Description
FindWindow $0 "#32770" "" $HWNDPARENT
GetDlgItem $1 $0 1043
${NSD_RemoveStyle} $1 0x08000000L
SetCtlColors $1 "0xFF0000" "0xF0F0F0" ; Красный текст на сером фоне (цвет фона-ОБЯЗАТЕЛЬНО)
GetDlgItem $1 $0 1042
SetCtlColors $1 "" "" ; Сейчас установлен прозрачный? цвет фона.
; Белый цвет "0xFFFFFF" фона на слово "Описание".
; Элемент рамки, цвет текста не меняется.
FunctionEnd
А этот вариант предложил
Flix. Решает те же задачи.
читать дальше »
Код:

; Variant by Flix.nsi
!include MUI2.nsh
!include nsDialogs.nsh
!define PRODUCT_NAME "'Variant by Flix'"
SetCompressor lzma
BrandingText "Nullsoft Scriptable Install System"
!define MUI_CUSTOMFUNCTION_GUIINIT onGUIInit
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_LICENSE "${NSISDIR}\Docs\Modern UI\License.txt"
; Функция включения элемента с описанием компонентов
!define MUI_PAGE_CUSTOMFUNCTION_SHOW ENABLEDStyle
; Функция включения элемента с описанием компонентов при наведении курсора мышки
!define MUI_CUSTOMFUNCTION_ONMOUSEOVERSECTION ENABLEDStyleOnSel
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_LANGUAGE "Russian"
Name "${PRODUCT_NAME}"
OutFile "flix.exe"
InstallDir "$TEMP"
Section "Секция 1" SEC1
SectionEnd
Section "Секция 2" SEC2
SectionEnd
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
!insertmacro MUI_DESCRIPTION_TEXT ${SEC1} "Описание первой секции"
!insertmacro MUI_DESCRIPTION_TEXT ${SEC2} "Описание второй секции"
!insertmacro MUI_FUNCTION_DESCRIPTION_END
Function onGUIInit
; Получаем дескриптор элемента управления с надписью бренда
GetDlgItem $0 $HWNDPARENT 1028
; Включаем элемент управления (1- включить, 0- отключить)
EnableWindow $0 1
SetCtlColors $0 "0xFF0000" transparent ; Красный цвет текста
FunctionEnd
Function ENABLEDStyle
; Функция включения стиля для элемента с описанием компонентов.
; Выполняем поиск окна
FindWindow $0 "#32770" "" $HWNDPARENT
; Получаем дескриптор элемента управления с описанием компонентов
GetDlgItem $1 $0 1043
; Включаем элемент управления
EnableWindow $1 1
SetCtlColors $1 "0xFF0000" "0xF0F000" ; Красный текст на желтом.
; Желтый выбран для наглядности. Цвет фона задавать ОБЯЗАТЕЛЬНО!
; Если фон прозрачный - тексты описания накладываются.
FunctionEnd
Function ENABLEDStyleOnSel
; Функция включения стиля для элемента с описанием компонентов
; при наведении курсора мышки на компоненты установки.
; Выполняем поиск окна инсталлятора
FindWindow $0 "#32770" "" $HWNDPARENT
; Получаем дескриптор элемента управления с описанием компонентов
GetDlgItem $1 $0 1043
; Включаем элемент управления
EnableWindow $1 1
SetCtlColors $1 "0xFF0000" "0xF0F000" ; Красный текст на желтом фоне
FunctionEnd
Надеюсь, что ничего не переврал.
Я попытался переделать вариант
Flix, использующий скины SkinSharp, в инсталлятор с функцией удаления. Чтобы деинсталлятор тоже был "одет". И стили branding-текста и описаний также отключались.
Но запутался окончательно. То
uninstall function "***" not referenced, то
Function named ".onGUIInit" already exists. То еще чего-нибудь.
Вот все, что у меня получилось.
Прошу не бросать на пол-дороги!
Применение скина SkinSharp в инсталляторе и деинсталляторе.
читать дальше »
Данный код позволяет использовать разное цветовое оформление для инсталлятора и деинстраллятора (в пределах выбранного скина).
Код:

;Uninstall_SkinH.nsh
!include MUI2.nsh
!include nsDialogs.nsh
!define PRODUCT_NAME "'Install-Uninstall SkinH'"
SetCompressor lzma
BrandingText "Nullsoft Scriptable Install System"
!insertmacro MUI_PAGE_WELCOME
!define MUI_PAGE_CUSTOMFUNCTION_PRE RemoveDISABLEDStyle
!insertmacro MUI_PAGE_LICENSE "${NSISDIR}\Docs\Modern UI\License.txt"
; Функция включения элемента с описанием компонентов
!define MUI_PAGE_CUSTOMFUNCTION_SHOW ENABLEDStyle
; Функция включения элемента с описанием компонентов при наведении курсора мышки
!define MUI_CUSTOMFUNCTION_ONMOUSEOVERSECTION ENABLEDStyleOnSel
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_UNPAGE_WELCOME
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_COMPONENTS
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_LANGUAGE "Russian"
Name "${PRODUCT_NAME}"
OutFile "UninSkinH.exe"
; The default installation directory
InstallDir $DESKTOP\UninSkinH"
Section "Секция 1" SEC1
SectionEnd
Section "Секция 2" SEC2
SectionEnd
Section ""
SetOutPath $INSTDIR
;Create uninstaller
WriteUninstaller "$INSTDIR\Uninstall.exe"
SectionEnd
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
!insertmacro MUI_DESCRIPTION_TEXT ${SEC1} "Описание первой секции"
!insertmacro MUI_DESCRIPTION_TEXT ${SEC2} "Описание второй секции"
!insertmacro MUI_FUNCTION_DESCRIPTION_END
Section un."Uninstall Skin"
delete "$INSTDIR\Uninstall.exe"
SetShellVarContext all
RMDir /r "$INSTDIR"
SetAutoClose false
SectionEnd
Function .onInit
InitPluginsDir
SetOutPath $PLUGINSDIR
File "D:\NSIS\SkinSharp\DLL\ANSI\SkinH.dll"
File "D:\NSIS\SkinSharp\Skins\0012.she"
;При помощи функции SkinH_AttachExt загружаем файл стиля с именем 0012.she
System::Call SkinH::SkinH_AttachExt(t'$PLUGINSDIR\0012.she',,i-150,i-0,i-0)
#################### Patches for SkinSharp ####################
System::Call Kernel32::GetModuleHandle(t"SkinH.dll")i.r0
IntOp $0 $0 + 0x0002CA98
System::Call Kernel32::GetCurrentProcess()i.s
System::Call Kernel32::VirtualProtectEx(is,ir0,i4,i0x40,*i)
System::Call "*$0(&i1 0)"
###############################################################
FunctionEnd
Function RemoveDISABLEDStyle
; Получаем дескриптор элемента управления с надписью бренда
GetDlgItem $0 $HWNDPARENT 1028
; Включаем элемент управления (1- включить, 0- отключить)
EnableWindow $0 1
FunctionEnd
Function ENABLEDStyle
; Выполняем поиск окна
FindWindow $0 "#32770" "" $HWNDPARENT
; Получаем дескриптор элемента управления с описанием компонентов
GetDlgItem $1 $0 1043
; Включаем элемент управления
EnableWindow $1 1
FunctionEnd
Function ENABLEDStyleOnSel
; Функция включения стиля для элемента с описанием компонентов
; при наведении курсора мышки на компоненты установки.
; Выполняем поиск окна инсталлятора
FindWindow $0 "#32770" "" $HWNDPARENT
; Получаем дескриптор элемента управления с описанием компонентов
GetDlgItem $1 $0 1043
; Включаем элемент управления
EnableWindow $1 1
FunctionEnd
Function un.onInit
InitPluginsDir
SetOutPath $PLUGINSDIR
File "D:\NSIS\SkinSharp\DLL\ANSI\SkinH.dll"
File "D:\NSIS\SkinSharp\Skins\0012.she"
;При помощи функции SkinH_AttachExt загружаем файл стиля с именем 0012.she
System::Call SkinH::SkinH_AttachExt(t'$PLUGINSDIR\0012.she',,i-30,i-0,i-0)
#################### Patches for SkinSharp ####################
System::Call Kernel32::GetModuleHandle(t"SkinH.dll")i.r0
IntOp $0 $0 + 0x0002CA98
System::Call Kernel32::GetCurrentProcess()i.s
System::Call Kernel32::VirtualProtectEx(is,ir0,i4,i0x40,*i)
System::Call "*$0(&i1 0)"
###############################################################
FunctionEnd
Function .onGUIEnd
; Удаление временной папки
System::Call Kernel32::GetModuleHandle(t"SkinH.dll")i.s
System::Call Kernel32::FreeLibrary(is)
System::Call Kernel32::SetCurrentDirectory(t"$EXEDIR\")
FunctionEnd
Function un.onGUIEnd
; Удаление временной папки
System::Call Kernel32::GetModuleHandle(t"SkinH.dll")i.s
System::Call Kernel32::FreeLibrary(is)
System::Call Kernel32::SetCurrentDirectory(t"$EXEDIR\")
FunctionEnd