Показать полную графическую версию : .: NSIS - все вопросы :. часть 2.
Vincent7
23-02-2014, 19:43
K.A.V., в моем случае не помогает код который дал kotkovets, ни те что в представленой им ссылке. Все дело в плагине nsisunrar2, при его использовании он создает ' свою' кнопку отмены, при нажатии которой прерывается только секция в которой используется этот плагин. А затем уже кнопка отмена возвращается в свое обычное состояние, и нужно нажимать ее еще раз. Как быть?
kotkovets
23-02-2014, 23:46
Все дело в плагине nsisunrar2, при его использовании он создает ' свою' кнопку отмены »
все правильно, разработчик сделал отмену своих действий (плагина),
просите автора ещё и сделать глобальное прерывание :), так сказать на выбор..
Как быть? »
Как? Ну, как, я же вам сказал: если вы пользуетесь неизвестным плагином - вам вряд-ли кто-то по нему что-то скажет, а если бы вы посидели и ещё "потыкали", чего вы не делали, я уверен (опять же из-за вашей лени, которая мне уже известна), то могли бы добиться возвращения от плагина числового значения об исходе распаковке архива
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 в дистрибутив?
Но так и не избавился от серого фона окна. Может кто подскажет, где и что отвечает за цвет фона окна? »
Видать ты не все перекрасил на рисунке. Смотри:
http://savepic.org/5075859m.png (http://savepic.org/5075859.htm)
А вот перекрасили:
http://savepic.org/5065619m.png (http://savepic.org/5065619.htm)
И теперь цвет фона окна будет - черным.
"Подсунуть" редактору измененное изображение скина можно, но тогда он теряет значение всех координат. Т.е. возвращаемся к тому, с чего начинали. Нет ли способа попроще? »
Да, так и есть. Я сам пробовал и так, и сяк, но все равно нужно все координаты и позиции проставлять с нуля.
А вот как узнать, хотя бы в том же hex-редакторе, в каком формате изображение было в коде и где этот кусок кода находится? »
Изображение в файле проекта SHeditor хранится в формате BMP, но в нем нет заголовка. Где именно, узнать очень просто. Сохрани изображение из проекта в отдельный файл. Затем открой его и сам файл проекта в НЕХ-редакторе. Выдели и скопируй в буфер пару десятков байт из массива с рисунком, но только не с самого начала файла, а отступи байт 50. Перейди на вкладку с массивом проекта и задай поиск байт, находящихся в буфере. Так ты сможешь найти рисунок. Можешь попробовать его подменить, но размер нового рисунка (без заголовка) не должен отличаться от исходного ни на байт, мне например этого не удалось добиться (правда я преследовал немного другую цель). Но может у тебя все получится. :)
Возвращаясь к "шкурному" вопросу при помощи 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 и тогда все отображалось, как нужно. Об этом уже кто-то упоминал здесь.
При использовании функции 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., спасибо, но я сделал по другому, в скрытой секции добавил код подсчета распакованных файлов, если их меньше чем должно быть-аборт
Страниц 50 назад MKN уже давал архив с этим "гардеробом" »
Да что вы прицепились к версиям DLL. Я к примеру искал юникодную версию данной библиотеки, т.к. использую юникодные версии NSIS/Inno Setup. Нашел у китайцев и выложил сюда, сам я ничего не выдумал. Товарищ MKN нашел одну, я нашел другую. По функционалу они обе одинаковы, разные размеры файлов говорят о том, что наверное ломались разными людьми, но что вам использовать решайте сами.
Можно ли отключить для этих элементов шрифтовые эффекты-дефекты? »
Мое мнение: Эти все так называемые "дефекты" являются результатом настроек персонализации Рабочего стола Windows (выбранная тема оформления, параметры ClearType и прочие настройки персонализации). Например, отключите у себя опцию ClearType (сглаживание текста) и указанного вами бага не будет.
http://savepic.org/5102392m.png (http://savepic.org/5102392.htm)
Поэтому с такими "дефектами" приходится мириться или применять стили, где они не так явно проявляются. Возможно все же есть какое-то другое решение, но я его не знаю.
Все равно, для нормальной работы требуется skinh.she. »
То есть вы указали путь к другому файла стиля и он не загрузился? А как же тогда работает обозреватель стилей? Там же выбирается конкретный файл (с другим именем) и он успешно загружается. Может вы допустили ошибку в параметрах функции SkinH_AttachEx?
Во всем этом "мёде" есть ложечка дегтя - на всех "темных" темах некрасиво отображается шрифт с "тенью" или "выдавленный" (бренд, описание компонентов).
Это касается не только шкурок 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
Чтобы не переименовывать файл стиля, нужно использовать функцию 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
А здесь цвет фона и других элементов окон.
Какой дескриптор у текста "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 еще не разбирался.
Если необходимо просто избавиться от дефекта, появляющегося на элементах с текстом фирмы и описания компонентов при использовании некоторых стилей 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. Желательно, пример в вашем же скрипте.
Способ номер 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". Поэтому и спросил. »
Всё дело в том, что данный элемент становится неактивным в момент наведения мышки на секции при работе инсталлятора
подскажите, пожалуйста, правильный синтаксис написания параметров для функции 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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.