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

Показать сообщение отдельно

Аватара для K.A.V.

Ленивый кусок мяса


Contributor


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

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


Цитата Kopejkin:
Какой дескриптор у текста "Position your mouse over a component to see its description" »
Переходим в папку \NSIS\Contrib\UIs и открываем modern.exe программой для просмотра ресурсов (ResHacker, Restorator и т.д.)
Ищем диалог, в котором располагается искомый элемент, в нашем случае это диалог 104 - выбор компонентов
Ищем нужный нам элемент и смотрим его ID - 1043

Теперь, чтобы выполнить взаимодействие с данным элементом при работе графического интерфейса инсталлятора (убрать/присвоить стиль, поменять текст/цвет и т.д.) - нам нужно узнать его дескриптор, дескриптор своего рода уникальный идентификатор каждого элемента в графическом интерфейсе любой программы, надеюсь, понятно объяснил, если что - гугл

Чтобы узнать этот самый дескриптор, нам нужно знать ID элемента, который прописан в UI файле (мы уже узнали, это 1043)
Но т.к. наш элемент находится в дочернем окне графического интерфейса ("внутри основного", посмотрите диалоги в ресурсах и всё поймёте), нам нужно сделать немножко другие манипуляции.
Теперь в коде выполняем команду:
Код: Выделить весь код
  GetDlgItem $0 $HWNDPARENT 1043
$0 - переменная, куда будет поммещен дескриптор элемента с ID 1043
$HWNDPARENT - дескриптор окна инсталлятора
1043 - соответственно, ID элемента, дескрпитор которого нам нужно узнать
Это пример получения дескриптора элемента по идентификатору в ресурсах диалога

Чтобы удалить стиль конкретно обсуждаемый "WS_DISABLED", нужно выполнить команду:
Код: Выделить весь код
 ${NSD_RemoveStyle} $0 0x08000000L
где $0 - дескриптор элемента, у которого удаляем стиль
0x08000000L - даёт понять команде, какой стиль удалять, в нашем случае это "WS_DISABLED"

Цитата Kopejkin:
При использовании скинов SkinSharp ваш способ не окрашивает текст в красный (серый), а дает возможность отображаться тексту "Nullsoft Install System"цветом других текстов скина. В окнах обычного инсталлятора (без скинов) текст окрашивается. »
И не удивительно, ведь "скин сам решает" и устанавливает свои цвета, точно также реализовано и в "NSIS SkinCrafter" плагине, при его использовании нельзя установить цвета на текст, для этого и были созданы скины...

Теперь о проблеме...Посидел, посмотрел, выводы такие:
Если вы хотите изменить цвет текста описания компонентов, то вы должны указать и цвет фона для этого текста, иначе получите глюки при отображении описаний (возможно, решаемо, но не хочу копаться )
Если цвет текста изменять не надо - будет дефолтный цвет (черный по-умолчанию, ну, в зависимости от настроек темы оформления и т.д.)
Т.к. речь идёт о кастомизации интерфейса, то делаю вывод, что цвет текста всё-таки менять нужно, иначе получится не очень привлекательно

реализовать можно так:
1. Если нужно просто убрать стиль на элемент описания, то воспользуйтесь примером из пункта 3, удалив те участки кода в моих примерах, которые выделены жирным шрифтом

Сдеюущие примеры для того, чтобы убрать стиль и назначить цвет текста и фона элементу описания секций
2. Не красиво, нужно редактировать главный файл настроек интерфейса MUI, но удобно назначать описания секциям, не внося никаких изменений в главный файл скрипта вашего инсталлятора
Можно, например, просто скопировать указанный ниже файл и в ту же папку и изменить его имя, и за место
Код: Выделить весь код
!include "mui.nsh"
прописать
Код: Выделить весь код
!include "C:\Program Files\NSIS\Contrib\Modern UI\My_System.nsh"
Открываем файл: \NSIS\Contrib\Modern UI\System.nsh
Ищем
читать дальше »
Код: Выделить весь код
!macro MUI_DESCRIPTION_BEGIN

  FindWindow $MUI_TEMP1 "#32770" "" $HWNDPARENT
  GetDlgItem $MUI_TEMP1 $MUI_TEMP1 1043

  StrCmp $0 -1 0 mui.description_begin_done
    SendMessage $MUI_TEMP1 ${WM_SETTEXT} 0 "STR:"
    EnableWindow $MUI_TEMP1 0
    SendMessage $MUI_TEMP1 ${WM_SETTEXT} 0 "STR:$MUI_TEXT"
    Goto mui.description_done
  mui.description_begin_done:

!macroend

Закомменитруем строку EnableWindow $MUI_TEMP1 0, которая делает элемент с текстом описания неактивным
читать дальше »
Код: Выделить весь код
!macro MUI_DESCRIPTION_BEGIN

  FindWindow $MUI_TEMP1 "#32770" "" $HWNDPARENT
  GetDlgItem $MUI_TEMP1 $MUI_TEMP1 1043

  StrCmp $0 -1 0 mui.description_begin_done
    SendMessage $MUI_TEMP1 ${WM_SETTEXT} 0 "STR:"
;    EnableWindow $MUI_TEMP1 0
    SendMessage $MUI_TEMP1 ${WM_SETTEXT} 0 "STR:$MUI_TEXT"
    Goto mui.description_done
  mui.description_begin_done:

!macroend


Ищем:
читать дальше »
Код: Выделить весь код
  Function "${SHOW}"

    !insertmacro MUI_INNERDIALOG_TEXT 1042 "${MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_TITLE}"

    FindWindow $MUI_TEMP1 "#32770" "" $HWNDPARENT
    GetDlgItem $MUI_TEMP1 $MUI_TEMP1 1043
    EnableWindow $MUI_TEMP1 0

    !insertmacro MUI_INNERDIALOG_TEXT 1043 "${MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_INFO}"
    StrCpy $MUI_TEXT "${MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_INFO}"
    !insertmacro MUI_PAGE_FUNCTION_CUSTOM SHOW

  FunctionEnd


Меняем на:
читать дальше »
Код: Выделить весь код
  Function "${SHOW}"

    !insertmacro MUI_INNERDIALOG_TEXT 1042 "${MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_TITLE}"

    FindWindow $MUI_TEMP2 "#32770" "" $HWNDPARENT
    GetDlgItem $MUI_TEMP1 $MUI_TEMP2 1043
    SetCtlColors $MUI_TEMP1 "0xFF0000"  "0xFFFFFF" ; Элемент текста описания, Красныйй цвет текста на белом фоне

    GetDlgItem $MUI_TEMP1 $MUI_TEMP2 1042
    SetCtlColors $MUI_TEMP1 ""  "0xFFFFFF" ; Ставим белый фон на слово "Описание", элемент рамки, цвет текста не меняется

    !insertmacro MUI_INNERDIALOG_TEXT 1043 "${MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_INFO}"
    StrCpy $MUI_TEXT "${MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_INFO}"
    !insertmacro MUI_PAGE_FUNCTION_CUSTOM SHOW

  FunctionEnd


3. Второй способ. Изменения вносятся только в ваш скрипт инсталлятора. Из плюсов - не нужно редактировать главный файл настроек MUI интерфейса. Минусы - нужно будет писать собственную функцию обработки показа описаний и нужно назначать описания секциям по порядковым номерам начиная с 0, т.е. в том порядке, в каком они прописаны в вашем скрипте.
Для начала
читать дальше »
Код: Выделить весь код
!insertmacro MUI_PAGE_WELCOME

!define MUI_PAGE_CUSTOMFUNCTION_SHOW RemoveDISABLEDStyle_Description

!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_INSTFILES


Функция
читать дальше »
Код: Выделить весь код
Function RemoveDISABLEDStyle_Description
FindWindow $0 "#32770" "" $HWNDPARENT
  GetDlgItem $1 $0 1043
  ${NSD_RemoveStyle} $1 0x08000000L
  SetCtlColors $1 "0xFF0000"  "0xFFFFFF" ; Красныйй цвет текста на белом фоне
  GetDlgItem $1 $0 1042
  SetCtlColors $1 ""  "0xFFFFFF" ; Ставим белый фон на слово "Описание", элемент рамки, цвет текста не меняется
FunctionEnd


Пример двух секций с присвоением им описаний + функция для обработки показа описаний
читать дальше »
Код: Выделить весь код
Section "Первая секция"
SectionEnd

Section "Вторая секция"
SectionEnd


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


При использовании второго метода не забудьте удалить старые строки описаний компонентов, типа таких:
читать дальше »
Код: Выделить весь код
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
  !insertmacro MUI_DESCRIPTION_TEXT ${SEC1} "Описание первой секции"
  !insertmacro MUI_DESCRIPTION_TEXT ${SEC2} "Описание второй секции"
!insertmacro MUI_FUNCTION_DESCRIPTION_END


вроде ничего не забыл

-------
[Справочник по командам Windows] -- [Справочник по NSIS] -- [SFX Creator - для создания SFX архивов]


Последний раз редактировалось K.A.V., 27-02-2014 в 01:42.

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

Отправлено: 01:17, 27-02-2014 | #1055