Войти

Показать полную графическую версию : .: NSIS - все вопросы :. часть 2.


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 [53] 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146

Vincent7
23-02-2014, 19:43
K.A.V., в моем случае не помогает код который дал kotkovets, ни те что в представленой им ссылке. Все дело в плагине nsisunrar2, при его использовании он создает ' свою' кнопку отмены, при нажатии которой прерывается только секция в которой используется этот плагин. А затем уже кнопка отмена возвращается в свое обычное состояние, и нужно нажимать ее еще раз. Как быть?

kotkovets
23-02-2014, 23:46
Все дело в плагине nsisunrar2, при его использовании он создает ' свою' кнопку отмены »
все правильно, разработчик сделал отмену своих действий (плагина),
просите автора ещё и сделать глобальное прерывание :), так сказать на выбор..

K.A.V.
24-02-2014, 01:36
Как быть? »
Как? Ну, как, я же вам сказал: если вы пользуетесь неизвестным плагином - вам вряд-ли кто-то по нему что-то скажет, а если бы вы посидели и ещё "потыкали", чего вы не делали, я уверен (опять же из-за вашей лени, которая мне уже известна), то могли бы добиться возвращения от плагина числового значения об исходе распаковке архива

nsisUnRar2::Extract "$DESKTOP\plugins.rar" "$DESKTOP\TEST"
pop $0
pop $1 ; 0 - архив не распакован, 1 - архив распакован
MessageBox MB_OK|MB_ICONINFORMATION "$1"
мне кажется, плагин возвращает то, что вам нужно

Если к примеру, указанного архива не существует, то в переменных будут следующие данные (опять же смотря на переменную $1 - что там возвращается я не в курсе, видимо коды возврата именно плагина, о которых знает только разраб)
nsisUnRar2::Extract "$DESKTOP\plugins.rar" "$DESKTOP\TEST"
pop $0
pop $1
pop $2

; $0 - error
; $1 - 15
; $2 - RAR open failed: File open error.


за вас снова всю работу сделали, не проще было бы вам добавить UnRAR.exe в дистрибутив?

Flix
24-02-2014, 14:21
Но так и не избавился от серого фона окна. Может кто подскажет, где и что отвечает за цвет фона окна? »
Видать ты не все перекрасил на рисунке. Смотри:
http://savepic.org/5075859m.png (http://savepic.org/5075859.htm)

А вот перекрасили:
http://savepic.org/5065619m.png (http://savepic.org/5065619.htm)

И теперь цвет фона окна будет - черным.

"Подсунуть" редактору измененное изображение скина можно, но тогда он теряет значение всех координат. Т.е. возвращаемся к тому, с чего начинали. Нет ли способа попроще? »
Да, так и есть. Я сам пробовал и так, и сяк, но все равно нужно все координаты и позиции проставлять с нуля.

А вот как узнать, хотя бы в том же hex-редакторе, в каком формате изображение было в коде и где этот кусок кода находится? »
Изображение в файле проекта SHeditor хранится в формате BMP, но в нем нет заголовка. Где именно, узнать очень просто. Сохрани изображение из проекта в отдельный файл. Затем открой его и сам файл проекта в НЕХ-редакторе. Выдели и скопируй в буфер пару десятков байт из массива с рисунком, но только не с самого начала файла, а отступи байт 50. Перейди на вкладку с массивом проекта и задай поиск байт, находящихся в буфере. Так ты сможешь найти рисунок. Можешь попробовать его подменить, но размер нового рисунка (без заголовка) не должен отличаться от исходного ни на байт, мне например этого не удалось добиться (правда я преследовал немного другую цель). Но может у тебя все получится. :)

Flix
24-02-2014, 15:30
Возвращаясь к "шкурному" вопросу при помощи SkinSharp, то вот перечень всех функций, которые поддерживает библиотека SkinH.dll (описание API в исходном коде библиотеки - перевод с китайского):

/*************************************************************/
/* Описание SkinSharp API */
/*************************************************************/

#ifndef SKIN_H
#define SKIN_H

/********************** Коды ошибок **************************/
#define SRET_OK 0 // Операция выполнена успешно
#define SRET_ERROR 1 // Операция не удалась
#define SRET_ERROR_READ 2 // Ошибка файловых операций
#define SRET_ERROR_PARAM 3 // Неверный параметр
#define SRET_ERROR_CREATE 4 // Ошибка создания стиля
#define SRET_ERROR_FORMAT 5 // Неверный формат стиля
#define SRET_ERROR_VERSION 6 // Неверная версия стиля
#define SRET_ERROR_PASSWORD 7 // Неверный пароль доступа к стилю
#define SRET_ERROR_INVALID 8 // Ошибка авторизации
/*************************************************************/


#define DECLSKINHAPI __declspec(dllimport) int __stdcall

extern "C"
{
/****************** Функция SkinH_Attach *********************/
// Загрузка файла стиля skinh.she. Для успешной загрузки стиля,
// файл стиля *.she должен быть в одном каталоге с файлом SkinH.dll.
// В случае успешного выполнения операции возвращает код 0.

DECLSKINHAPI SkinH_Attach();
/*************************************************************/

/****************** Функция SkinH_AttachEx *******************/
// Загрузка файла стиля по указанному пути.
// В случае успешного выполнения операции возвращает код 0.

DECLSKINHAPI SkinH_AttachEx(
LPCTSTR strSkinFile, // Путь к файлу стиля.
LPCTSTR strPassword // Пароль к файлу стиля.
);
/*************************************************************/

/****************** Функция SkinH_AttachExt ******************/
// Загрузка указанного файла стиля с заданными параметрами насыщенности, оттенка и яркости.
// В случае успешного выполнения операции возвращает код 0.

DECLSKINHAPI SkinH_AttachExt(
LPCTSTR strSkinFile, // Путь к файлу стиля.
LPCTSTR strPassword, // Пароль к файлу стиля.
int nHue, // Оттенок. Диапазон значений от -180 до +180, по умолчанию 0.
int nSat, // Насыщенность. Диапазон значений от -100 до +100, по умолчанию 0.
int nBri // Яркость. Диапазон значений от -100 до +100, по умолчанию 0.
);
/*************************************************************/

/****************** Функция SkinH_AttachRes ******************/
// Загрузка указанного ресурса стиля с заданными параметрами насыщенности, оттенка и яркости.
// В случае успешного выполнения операции возвращает код 0.

DECLSKINHAPI SkinH_AttachRes(
LPBYTE pShe, // Указатель на ресурсы стиля.
DWORD dwSize, // Размер ресурсов.
LPCTSTR strPassword, // Пароль к файлу стиля.
int nHue, // Оттенок. Диапазон значений от -180 до +180, по умолчанию 0.
int nSat, // Насыщенность. Диапазон значений от -100 до +100, по умолчанию 0.
int nBri // Яркость. Диапазон значений от -100 до +100, по умолчанию 0.
);
/*************************************************************/

/****************** Функция SkinH_AttachResEx ****************/
// Загрузка указанного имени ресурса стиля с заданными параметрами насыщенности, оттенка и яркости.
// В случае успешного выполнения операции возвращает код 0.

DECLSKINHAPI SkinH_AttachResEx(
LPCTSTR lpName, // Имя ресурса.
LPCTSTR lpType, // Тип ресурса.
LPCTSTR strPassword, // Пароль к файлу стиля.
int nHue, // Оттенок. Диапазон значений от -180 до +180, по умолчанию 0.
int nSat, // Насыщенность. Диапазон значений от -100 до +100, по умолчанию 0.
int nBri // Яркость. Диапазон значений от -100 до +100, по умолчанию 0.
);
/*************************************************************/

/****************** Функция SkinH_Detach *********************/
// Выгрузка стиля.
// В случае успешного выполнения операции возвращает код 0.

DECLSKINHAPI SkinH_Detach();
/*************************************************************/

/****************** Функция SkinH_DetachEx *******************/
// Выгрузка стиля для указанного дескриптора окна.
// В случае успешного выполнения операции возвращает код 0.

DECLSKINHAPI SkinH_DetachEx(
HWND hWnd // Дескриптор (handle) окна.
);
/*************************************************************/

/****************** Функция SkinH_SetWindowAlpha *************/
// Установка уровня прозрачности для указанного дескриптора окна.
// В случае успешного выполнения операции возвращает код 0.

DECLSKINHAPI SkinH_SetWindowAlpha(
HWND hWnd, // Дескриптор (handle) окна.
int nAlpha // Прозрачность. Диапазон значений от 0 до 255.
);
/*************************************************************/

/****************** Функция SkinH_AdjustHSV ******************/
// Настройка оттенка, насыщенности и яркости стиля.
// В случае успешного выполнения операции возвращает код 0.

DECLSKINHAPI SkinH_AdjustHSV(
int nHue, // Оттенок. Диапазон значений от -180 до +180, по умолчанию 0.
int nSat, // Насыщенность. Диапазон значений от -100 до +100, по умолчанию 0.
int nBri // Яркость. Диапазон значений от -100 до +100, по умолчанию 0.
);
/*************************************************************/

/****************** Функция SkinH_GetColor *******************/
// Получение значения цвета в точке с координатами nX, nY.
// В случае успешного выполнения операции возвращает код 0.

DECLSKINHAPI SkinH_GetColor(
HWND hWnd, // Дескриптор (handle) окна или элемента управления.
int nX, // Значение координаты Х.
int nY // Значение координаты Y.
);
/*************************************************************/

/****************** Функция SkinH_Map ************************/
// Установка стиля для определенного типа элемента управления.
// В случае успешного выполнения операции возвращает код 0.

DECLSKINHAPI SkinH_Map(
HWND hWnd, // Дескриптор (handle) окна или элемента управления.
int nType // Тип элемента управления.
);
// Идентификаторы элементов управления
#define TYPE_UNKNOWN 0
#define TYPE_ANIMATE 1001
#define TYPE_CHECKBOX 1002
#define TYPE_COMBOBOX 1003
#define TYPE_COMBOLBOX 1004
#define TYPE_CONTROLBAR 1005
#define TYPE_DATETIME 1006
#define TYPE_EDITBOX 1007
#define TYPE_GROUPBOX 1008
#define TYPE_HEADERCTRL 1009
#define TYPE_HOTKEY 1010
#define TYPE_IPADDRESS 1011
#define TYPE_LABEL 1012
#define TYPE_LISTBOX 1013
#define TYPE_LISTVIEW 1014
#define TYPE_MDICLIENT 1015
#define TYPE_MENU 1016
#define TYPE_MONTHCAL 1017
#define TYPE_PICTURE 1018
#define TYPE_PROGRESS 1019
#define TYPE_PUSHBUTTON 1020
#define TYPE_RADIOBUTTON 1021
#define TYPE_REBAR 1022
#define TYPE_RICHEDIT 1023
#define TYPE_SCROLLBAR 1024
#define TYPE_SCROLLCTRL 1025
#define TYPE_SPINCTRL 1026
#define TYPE_STATUSBAR 1027
#define TYPE_TABCTRL 1028
#define TYPE_TOOLBAR 1029
#define TYPE_TOOLBARWND 1030
#define TYPE_TRACKBAR 1031
#define TYPE_TREEVIEW 1032
#define TYPE_WINDOW 1034
#define TYPE_COMCTRL 1036
#define TYPE_PAINTCTRL 1037
/*************************************************************/

/****************** Функция SkinH_SetAero ********************/
// Включение/Отключение эффекта Aero.
// В случае успешного выполнения операции возвращает код 0.

DECLSKINHAPI SkinH_SetAero(
int bAero // Включить Aero - 1. Отключить Aero - 0.
);
/*************************************************************/

/****************** Функция SkinH_AdjustAero *****************/
// Установка параметров Aero.
// В случае успешного выполнения операции возвращает код 0.

DECLSKINHAPI SkinH_AdjustAero(
int nAlpha, // Прозрачность. Диапазон значений от 0 до 255 (по умолчанию 0).
int nShwDark, // Яркость тени. Диапазон значений от 0 до 255 (по умолчанию 0).
int nShwSharp, // Четкость тени. Диапазон значений от 0 до 255 (по умолчанию 0).
int nShwSize, // Размер тени. Диапазон значений от 2 до 19 (по умолчанию 2).
int nX, // Смещение по горизонтали (X), 0-25 (по умолчанию 0).
int nY, // Смещение по вертикали (Y), 0-25 (по умолчанию 0).
int nRed, // Красный компонент цвета. Диапазон значений от 0 до 255 (по умолчанию -1).
int nGreen, // Зеленый компонент цвета. Диапазон значений от 0 до 255 (по умолчанию -1).
int nBlue // Синий компонент цвета. Диапазон значений от 0 до 255 (по умолчанию -1).
);
/*************************************************************/

/****************** Функция SkinH_SetWindowMovable ***********/
// Установка для формы свойства Moveable.
// В случае успешного выполнения операции возвращает код 0.

DECLSKINHAPI SkinH_SetWindowMovable(
HWND hWnd, // Дескриптор (handle) окна.
BOOL bMovable // 0 - неперемещаемая, 1 - перемещаемая.
);
/*************************************************************/

/****************** Функция SkinH_SetBackColor ***************/
// Установка фонового цвета для заданного элемента управления
// (только для элементов управления CheckBox, Edit, GroupBox).
// В случае успешного выполнения операции возвращает код 0.

DECLSKINHAPI SkinH_SetBackColor(
HWND hWnd, // Дескриптор (handle) элемента управления.
int nRed, // Значение красного компонента цвета.
int nGreen, // Значение зеленого компонента цвета.
int nBlue // Значение синего компонента цвета.
);
/*************************************************************/

/****************** Функция SkinH_SetForeColor ***************/
// Установка переднего цвета для заданного элемента управления
// (только для элементов управления CheckBox, Edit, GroupBox).
// В случае успешного выполнения операции возвращает код 0.

DECLSKINHAPI SkinH_SetForeColor(
HWND hWnd, // Дескриптор (handle) элемента управления.
int nRed, // Значение красного компонента цвета.
int nGreen, // Значение зеленого компонента цвета.
int nBlue // Значение синего компонента цвета.
);
/*************************************************************/

/****************** Функция SkinH_LockUpdate *****************/
// Обновление или блокировка эффекта стиля для указанного дескриптора
// окна или элемента управления, в случае многократной смены стиля.
// В случае успешного выполнения операции возвращает код 0.

DECLSKINHAPI SkinH_LockUpdate(
HWND hWnd, // Дескриптор (handle) окна или элемента управления.
int bUpdate // Блокировать эффект - 1, обновить эффект - 0.
);
/*************************************************************/

/****************** Функция SkinH_SetMenuAlpha ***************/
// Установка прозрачности меню.
// В случае успешного выполнения операции возвращает код 0.

DECLSKINHAPI SkinH_SetMenuAlpha(
int nAlpha // Прозрачность. Диапазон значений от 0 до 255.
);
/*************************************************************/

/****************** Функция SkinH_NineBlt ********************/
// Отрисовка контекста элемента.
// В случае успешного выполнения операции возвращает код 0.

DECLSKINHAPI SkinH_NineBlt(
HDC hDtDC, // Контекст элемента.
int left, // Координата X левого верхнего угла элемента.
int top, // Координата Y левого верхнего угла элемента.
int right, // Координата X правого нижнего угла элемента.
int bottom, // Координата Y правого нижнего угла элемента.
int nMRect // Идентификатор (ID) элемента.
);
/*************************************************************/

/****************** Функция SkinH_SetTitleMenuBar ************/
// Установка заголовка меню.
// В случае успешного выполнения операции возвращает код 0.

DECLSKINHAPI SkinH_SetTitleMenuBar(
HWND hWnd, // Дескриптор (handle) окна.
BOOL bEnable, // 1 - установить параметры меню. 0 - отменить установку.
int nTMenuY, // Высота панели меню.
int nTopOffs, // Смещение сверху.
int nRightOffs // Смещение вправо.
);
/*************************************************************/

/****************** Функция SkinH_SetFont ********************/
// Установка шрифта для заданного элемента управления.
// В случае успешного выполнения операции возвращает код 0.

DECLSKINHAPI SkinH_SetFont(
HWND hWnd, // Дескриптор (handle) элемента управления.
HFONT hFont // Дескриптор шрифта.
);
/*************************************************************/

/****************** Функция SkinH_SetFontEx ******************/
// Установка свойств шрифта для заданного элемента управления.
// В случае успешного выполнения операции возвращает код 0.

DECLSKINHAPI SkinH_SetFontEx(
HWND hWnd, // Дескриптор (handle) элемента управления.
LPCTSTR szFace, // Имя шрифта.
int nHeight, // Высота шрифта.
int nWidth, // Ширина шрифта.
int nWeight, // Плотность шрифта.
int nItalic, // Стиль курсив.
int nUnderline, // Стиль подчеркнутый.
int nStrikeOut // Стиль зачеркнутый.
);
/*************************************************************/

/****************** Функция SkinH_VerifySign *****************/
// Проверка цифровой подписи.
// Подпись есть и она действительна - возвращает код 1.
// Подписи нет или она недействительна - возвращает код 0.

DECLSKINHAPI SkinH_VerifySign();
/*************************************************************/

}
#endif

Например, чтобы изменить цветовую гамму загруженного стиля, нужно в сценарии указать следующую команду:

# Настройка оттенка, насыщенности и яркости стиля.
; 80 - значение оттенка
; 75 - значение насыщенности
; 0 - значение яркости
System::Call SkinH::SkinH_AdjustHSV(i80,i75,i0)

Необходимые параметры можно подобрать при помощи обозревателя стилей SkinViewer:

http://savepic.org/5080982m.png (http://savepic.org/5080982.htm)

Таким образом не обязательно создавать новый стиль, можно просто подобрать желаемые параметры цвета для одного из готовых стилей и указать их в сценарии.

Kopejkin
25-02-2014, 03:45
По-моему, чернее не бывает...
Красил в первую очередь, т.к. "явно" указывало - Client.

http://savepic.org/5062616m.png (http://savepic.org/5062616.htm)

P.S. А этот просмотрщик скинов как отдельное приложение доступен? С наскоку не нашел. Пусть было бы в хозяйстве.

/**********Функция SkinH_Attach *********************/
// Загрузка файла стиля skinh.she. Для успешной загрузки стиля,
// файл стиля *.she должен быть в одном каталоге с файлом SkinH.dll.
// В случае успешного выполнения операции возвращает код 0.
Мне не удавалось создать нормальный инсталлятор с файлом скина, который бы назывался иначе, чем skinh.she. Приходилось каждый из предлагаемых скинов переименовывать в skinh.she и тогда все отображалось, как нужно. Об этом уже кто-то упоминал здесь.

Flix
25-02-2014, 19:49
При использовании функции SkinH_Attach имя файла стиля должно быть skinh.she и никакое другое. Поэтому, чтобы прицепить другой стиль, файл выбранного стиля нужно переименовать в skinh.she. Чтобы не переименовывать файл стиля, нужно использовать функцию SkinH_AttachEx (данное утверждение нуждается в проверке).

Вот все в куче: СКАЧАТЬ (http://rghost.ru/private/52660325/afefa798c442541d9b61d2797e1be10d)

В архиве:
- SHEditor - редактор стилей (русская версия от Leserg);
- SkinViewer - обозреватель стилей (при запуске обращается к папке Skins, если у вас появится новый стиль, просто положите его в эту папку и перезапустите программу - стиль появится в списке);
- Папка Skins - 116 стилей (внимание, многие стили необходимо исправлять (корректировать координаты позиции и прочее), т.к. большинство из них были сделаны в старой версии редактора);
- Папка DLL - библиотека SkinH.dll, соответственно ANSI и Unicode версии. Её можно применять в инсталляторах NSIS/Inno Setup (ANSI/Unicode).

При всем множестве возможных вариантов реализации скинизации инсталляторов NSIS/Inno Setup, я остановился именно на SkinSharp. Маленькая, да удаленькая. :)

Kopejkin
26-02-2014, 02:34
Спасибо, сейчас и проверю.

Kopejkin
26-02-2014, 11:41
...нужно использовать функцию SkinH_AttachEx »
У себя никакой разницы не заметил. Все равно, для нормальной работы требуется skinh.she.

...библиотека SkinH.dll »Страниц 50 назад MKN уже давал архив с этим "гардеробом".

SkinH.dll у MKN
версия: 1.0.6.6.
дата изменения: 15/08/2010
размер: 89,5 кб

SkinH.dl у Flix
версия: 1.0.6.6.
дата изменения: 11/09/2013
размер: 84,5 Кб

Разницы в работе не заметил.

Во всем этом "мёде" есть ложечка дегтя - на всех "темных" темах некрасиво отображается шрифт с "тенью" или "выдавленный" (бренд, описание компонентов).
Это касается не только шкурок SkinSharp. Такой же эффект был и со шкурками ISSkin.

http://savepic.su/4137328.png http://savepic.su/4129136.png

http://savepic.su/4144496.png

http://savepic.su/4132208.png

Можно ли отключить для этих элементов шрифтовые эффекты-дефекты?

Со скинами VCL Style такой дефект присутствует в поле описания компонентов и то только при первом наведении мыши на эту область. Если щелкнуть по компоненту и снова навести указатель в поле описания, "эффект" уже не проявляется.
На бренде его и не было.

http://savepic.su/4134261.png http://savepic.su/4189556.png

Vincent7
26-02-2014, 15:33
K.A.V., спасибо, но я сделал по другому, в скрытой секции добавил код подсчета распакованных файлов, если их меньше чем должно быть-аборт

Flix
26-02-2014, 16:30
Страниц 50 назад MKN уже давал архив с этим "гардеробом" »
Да что вы прицепились к версиям DLL. Я к примеру искал юникодную версию данной библиотеки, т.к. использую юникодные версии NSIS/Inno Setup. Нашел у китайцев и выложил сюда, сам я ничего не выдумал. Товарищ MKN нашел одну, я нашел другую. По функционалу они обе одинаковы, разные размеры файлов говорят о том, что наверное ломались разными людьми, но что вам использовать решайте сами.

Можно ли отключить для этих элементов шрифтовые эффекты-дефекты? »
Мое мнение: Эти все так называемые "дефекты" являются результатом настроек персонализации Рабочего стола Windows (выбранная тема оформления, параметры ClearType и прочие настройки персонализации). Например, отключите у себя опцию ClearType (сглаживание текста) и указанного вами бага не будет.
http://savepic.org/5102392m.png (http://savepic.org/5102392.htm)

Поэтому с такими "дефектами" приходится мириться или применять стили, где они не так явно проявляются. Возможно все же есть какое-то другое решение, но я его не знаю.

Все равно, для нормальной работы требуется skinh.she. »
То есть вы указали путь к другому файла стиля и он не загрузился? А как же тогда работает обозреватель стилей? Там же выбирается конкретный файл (с другим именем) и он успешно загружается. Может вы допустили ошибку в параметрах функции SkinH_AttachEx?

K.A.V.
26-02-2014, 17:01
Во всем этом "мёде" есть ложечка дегтя - на всех "темных" темах некрасиво отображается шрифт с "тенью" или "выдавленный" (бренд, описание компонентов).
Это касается не только шкурок SkinSharp. Такой же эффект был и со шкурками ISSkin. »
Мое мнение: Эти все так называемые "дефекты" являются результатом настроек персонализации Рабочего стола Windows »
Данным элементам присвоен стиль "WS_DISABLED", возможно из-за этого получаются глюки при отображении текста данных элементов, попробуйте добавить функцию удаления стиля и назначения своего цвета тексту (серый и красный на выбор в моём примере)
*В примере идёт удаление стиля у надписи "Nullsoft Scriptable Install System"


!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

!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_INSTFILES


Функция

Function RemoveDISABLEDStyle
GetDlgItem $0 $HWNDPARENT 1028
${NSD_RemoveStyle} $0 0x08000000L
; SetCtlColors $0 "0xFF0000" transparent ; Красныйй цвет текста
SetCtlColors $0 "0x808080" transparent ; Серый цвет текста
FunctionEnd

Flix
26-02-2014, 18:34
Чтобы не переименовывать файл стиля, нужно использовать функцию SkinH_AttachEx (данное утверждение нуждается в проверке). »
Только что проверил - работает. Вот как выглядит код:

Function onGUIInit
InitPluginsDir
SetOutPath $PLUGINSDIR
File "${NSISDIR}\Plugins\x86-unicode\SkinH.dll"
File "${NSISDIR}\Contrib\Skins\0011.she"

; При помощи функции SkinH_AttachEx загружаем файл стиля с именем 0011.she
System::Call SkinH::SkinH_AttachEx(t'$PLUGINSDIR\0011.she')

#################### 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
Пути к файлам у вас конечно же могут быть другие. Я использую Unicode, поэтому и DLL юникодный. Таким образом можно не переименовывать файлы стилей.

Данным элементам присвоен стиль "WS_DISABLED", возможно из-за этого получаются глюки при отображении текста данных элементов »
Да, точно, и это тоже оказывается имеет значение, вы правы. Если элемент не использует стиль WS_DISABLED, то текст отображается нормально.

Kopejkin
26-02-2014, 23:34
K.A.V., Приятно послушать разговор знающих людей. Особенно когда тема беседы понятна.
Т.к. это не про меня, буду вставлять умные слова в свои вопросы "хотелки".
Какой дескриптор у текста "Position your mouse over a component to see its description" и ... В общем, как у этого текста удалить стиль? :)
Домашняя работа.
При использовании скинов SkinSharp ваш способ не окрашивает текст в красный (серый), а дает возможность отображаться тексту "Nullsoft Install System"цветом других текстов скина. В окнах обычного инсталлятора (без скинов) текст окрашивается.
Для правильной работы команду "!define MUI_PAGE_CUSTOMFUNCTION_PRE RemoveDISABLEDStyle" понадобилось установить перед страницей приветствия.

Нашел я, все-таки, где цвет фона окна меняется в VCL Styles for NSIS. Странно, что долго искал :(


http://savepic.su/4146334.png

Здесь можно поменять цвет текста.


http://savepic.su/4138142.png

А здесь цвет фона и других элементов окон.

K.A.V.
27-02-2014, 01:17
Какой дескриптор у текста "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 (http://msdn.microsoft.com/en-us/library/windows/desktop/ms632600(v=vs.85).aspx)"

При использовании скинов 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


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

Kopejkin
27-02-2014, 13:56
0x08000000L - даёт понять команде, какой стиль удалять, в нашем случае это "WS_DISABLED.» Это, по образу и подобию, я скопипастил в первую очередь :)

Function RemoveDISABLEDStyle

GetDlgItem $0 $HWNDPARENT 1028
${NSD_RemoveStyle} $0 0x08000000L
SetCtlColors $0 "0xFF0000" transparent ; Красный цвет текста

GetDlgItem $1 $HWNDPARENT 1043
${NSD_RemoveStyle} $1 0x08000000L
SetCtlColors $1 "0xFF0000" transparent ; Красный цвет текста

FunctionEndТолько для текста "Position your mouse over a component to see its description" этот вариант не прошел.
У элемента 1043 не оказалось параметра "WS_DISABLED". Там стоит "WS_VISIBLE". Поэтому и спросил.

http://savepic.su/4163752m.png (http://savepic.su/4163752.htm)

Способ номер 2 не работает - ничего нигде не перекрашивается и стиль не удаляется.

Вот код, на котором испытывался способ 2.
(Скрипт с ошибками, поэтому и неправильно работает)


/*
ВНИМАНИЕ! СКРИПТ С ОШИБКАМИ.

Hide Style.nsi
Скрываем стили текстов и красим их
Совет от K.A.V.
*/

!include "MUI2.nsh"
;!include "nsDialogs.nsh" - нужно-не нужно? Что с ним, что без него.
!addplugindir "..\..\Win32\Release"

;--------------------------------

;General
Name "Hide Style"
OutFile "Hide_Style.exe"
;Default installation folder
InstallDir "$TEMP"
;Request application privileges for Windows Vista
RequestExecutionLevel user

;--------------------------------
; макрос удаления стиля текста (K.A.V.)
!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

!define MUI_ABORTWARNING

;--------------------------------
!define MUI_PAGE_CUSTOMFUNCTION_SHOW RemoveDISABLEDStyle_Description ; Команда отключения стиля текста
;!define MUI_CUSTOMFUNCTION_GUIINIT onGUIInit ; Команда использования скина

!insertmacro MUI_PAGE_LICENSE "${NSISDIR}\Docs\Modern UI\License.txt"
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES

!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES

;--------------------------------
;Languages

!insertmacro MUI_LANGUAGE "English"

;--------------------------------

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


;РАБОТАЮЩАЯ функция (для текста "Nullsoft Install System")

Function RemoveDISABLEDStyle_Description
GetDlgItem $0 $HWNDPARENT 1028
${NSD_RemoveStyle} $0 0x08000000L
SetCtlColors $0 "0xFF0000" transparent ; Красный цвет текста
;SetCtlColors $0 "0x808080" transparent ; Серый цвет текста
FunctionEnd

/*
; НЕ РАБОТАЮЩАЯ функция (для текста описания "Position your mouse over a component to see its description"

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

; Использование скинов SkinH (совет от Flix)
Function onGUIInit
InitPluginsDir
SetOutPath $PLUGINSDIR
File "D:\NSIS\SkinSharp\DLL\ANSI\SkinH.dll"
File "D:\NSIS\SkinSharp\Skins\0012.she"
; При помощи функции SkinH_AttachEx загружаем файл стиля с именем 0011.she

System::Call SkinH::SkinH_AttachEx(t'$PLUGINSDIR\0012.she')
System::Call SkinH::SkinH_AdjustHSV(i-20,i,i) ; здесь можно красить скин

; 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
*/


Снимки с использованием скина SkinH и без него:

http://savepic.su/4133037m.png (http://savepic.su/4133037.htm) http://savepic.su/4188332m.png (http://savepic.su/4188332.htm)

Функция работает

http://savepic.su/4190380m.png (http://savepic.su/4190380.htm) http://savepic.su/4179116m.png (http://savepic.su/4179116.htm)

Функция не работает

Может я накосячил чего?
Сам добавил позднее:
Накосячил 100 %.


Со способом номер 1 еще не разбирался.

Flix
27-02-2014, 14:27
Если необходимо просто избавиться от дефекта, появляющегося на элементах с текстом фирмы и описания компонентов при использовании некоторых стилей SkinSharp, то вариант, предложенный K.A.V. можно намного упростить. Как мы уже выяснили ранее, данный дефект проявляется на элементах, у которых имеется свойство WS_DISABLED, т.е. говоря простым язык - элемент отключен.

http://savepic.org/5110636m.png (http://savepic.org/5110636.htm)

Чтобы избавиться от дефекта, данные элементы необходимо включить, и тогда текст примет свойства заданные самой темой.

Включаем элемент с текстом фирмы (брандинг). В функции onGUIInit, перед командой применением стиля, указываем следующие команды:

; Получаем дескриптор элемента управления с надписью бренда
GetDlgItem $0 $HWNDPARENT 1028
; Включаем элемент управления (1- включить, 0- отключить)
EnableWindow $0 1

Включаем элемент с описанием компонентов установки. Здесь необходимо добавить две функции перед страницей с выбором компонентов. Первая функция включит элемент при отображении диалога, а вторая будет включать элемент каждый раз при наведении курсора мышки на компоненты установки. Итак, указываем функции:

; Функция включения элемента с описанием компонентов
!define MUI_PAGE_CUSTOMFUNCTION_SHOW ENABLEDStyle
; Функция включения элемента с описанием компонентов при наведении курсора мышки
!define MUI_CUSTOMFUNCTION_ONMOUSEOVERSECTION ENABLEDStyleOnSel

!insertmacro MUI_PAGE_COMPONENTS

А теперь код самих функций:

# Функция включения стиля для элемента с описанием компонентов
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

При этом строки с описанием компонентов можно оставить без изменений:

!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
!insertmacro MUI_DESCRIPTION_TEXT ${SEC1} "Описание первой секции"
!insertmacro MUI_DESCRIPTION_TEXT ${SEC2} "Описание второй секции"
!insertmacro MUI_FUNCTION_DESCRIPTION_END

Вот и все, при работе инсталлятора, например с темой 0011.she, указанного выше дефекта мы больше наблюдать не будем:

http://savepic.org/5108588m.png (http://savepic.org/5108588.htm)

Полный код сценария (используется NSIS v3.0a2):

# Поддержка Unicode
Unicode true

!include MUI.nsh
!include nsDialogs.nsh

!define PRODUCT_NAME "My application"
SetCompressor lzma
BrandingText "Nullsoft Scriptable Install System"


!define MUI_CUSTOMFUNCTION_GUIINIT onGUIInit

!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_LICENSE "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 "SkinH"
OutFile "setup_SkinH.exe"
InstallDir "$PROGRAMFILES\My application"

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
InitPluginsDir
SetOutPath $PLUGINSDIR
File "${NSISDIR}\Plugins\x86-unicode\SkinH.dll"
File "${NSISDIR}\Contrib\Skins\0011.she"

; Получаем дескриптор элемента управления с надписью бренда
GetDlgItem $0 $HWNDPARENT 1028
; Включаем элемент управления (1- включить, 0- отключить)
EnableWindow $0 1

; При помощи функции SkinH_AttachEx загружаем файл стиля с именем 0011.she
System::Call SkinH::SkinH_AttachEx(t'$PLUGINSDIR\0011.she')

#################### 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 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 .onGUIEnd
; Удаление временной папки
System::Call Kernel32::GetModuleHandle(t"SkinH.dll")i.s
System::Call Kernel32::FreeLibrary(is)
System::Call Kernel32::SetCurrentDirectory(t"$EXEDIR\")
FunctionEnd

Kopejkin
27-02-2014, 14:53
Flix, подскажите, пожалуйста, правильный синтаксис написания параметров для функции SkinH_AttachExt. Я так понимаю, что тогда не нужно будет прописывать отдельную функцию настройки оттенка, насыщенности и яркости SkinH_AdjustHSV. Желательно, пример в вашем же скрипте.

K.A.V.
27-02-2014, 15:18
Способ номер 3 не работает - ничего нигде не перекрашивается и стиль не удаляется. »
Да ладно вам, внимательно нужно смотреть, инклудить всё, что я предлагаю и прописывать команды в том порядке, в котором прописаны у меня. Думаете я просто так написал вам неработающий код в нескольких вариантах в 4 утра по своему времени?

Нужно
!include "nsDialogs.nsh"

Неправильно

!define MUI_PAGE_CUSTOMFUNCTION_SHOW RemoveDISABLEDStyle_Description ; Команда отключения стиля текста
!insertmacro MUI_PAGE_LICENSE "${NSISDIR}\Docs\Modern UI\License.txt"

!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES


Правильно

!insertmacro MUI_PAGE_LICENSE "${NSISDIR}\Docs\Modern UI\License.txt"
!define MUI_PAGE_CUSTOMFUNCTION_SHOW RemoveDISABLEDStyle_Description ; Команда отключения стиля текста
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES


Только для текста "Position your mouse over a component to see its description" этот вариант не прошел.
У элемента 1043 не оказалось параметра "WS_DISABLED". Там стоит "WS_VISIBLE". Поэтому и спросил. »
Всё дело в том, что данный элемент становится неактивным в момент наведения мышки на секции при работе инсталлятора

Flix
27-02-2014, 16:32
подскажите, пожалуйста, правильный синтаксис написания параметров для функции SkinH_AttachExt »
Да все очень просто. Меняете команду:

; При помощи функции SkinH_AttachEx загружаем файл стиля с именем 0011.she
System::Call SkinH::SkinH_AttachEx(t'$PLUGINSDIR\0011.she')

На команду:

; При помощи функции SkinH_AttachExt загружаем файл стиля с именем 0012.she
; и указываем для него желаемые параметры (можно подобрать с помощью SkinViewer):
; - Оттенок = 155
; - Насыщенность = -32
; - Яркость = -12
; Примечание: т.к. пароль для выбранного стиля не задан, то в параметрах
; функции оставляем пустое значение (,,), т.е. для этого
; параметра (strPassword) функция получит значение null.
System::Call SkinH::SkinH_AttachExt(t'$PLUGINSDIR\0012.she',,i155,i-32,i-12)




© OSzone.net 2001-2012