Показать полную графическую версию : [архив].: NSIS - все вопросы :.
kotkovets
07-10-2011, 17:47
nsDialogs функция PRE занята »
чушь! это параметр макроса, означает объявить пользовательскую функцию,
которая будет выполнена перед открытием странички.
использую BrandingURL plug-in »
ну так и задавайте цвет этим же плагином
BrandingURL::Set /NOUNLOAD [R] [G] [B] [link_url]
ну так и задавайте цвет этим же плагином »
да, но это же цвет текста
а мне нужно задать цвет фона под текстом
в итоге цвет фона вокруг у меня светло синий
цвет линка черный, а цвет под линком серый прямоугольничек..))
PS Получилось
просто
GetDlgItem $0 $HWNDPARENT 1028
SetCtlColors $0 0x000000 0xEBEBEB
нужно было в другой функции вызывать (там где я диалог строю, а я это делал немного в другом месте)и все
как мне сделать фон в BrandingText нужным мне? »
Опять открываем NSIS\Contrib\Modern UI 2\Interface.nsh
и смотрим
---------
GetDlgItem $mui.Branding.Background $HWNDPARENT 1028
SetCtlColors $mui.Branding.Background /BRANDING
---------
надеюсь понятно
SetCtlColors $mui.Branding.Background ${MUI_BGCOLOR} transparent
тоже самое с 1256, эти контролы 1028 и 1256 работают вместе
--
kotkovets
07-10-2011, 18:18
Опять открываем NSIS\Contrib\Modern UI 2\Interface.nsh »
Я иногда делаю так на стандартном, неизмененном ресурсе modern.exe
!include "MUI2.nsh"
!define MUI_CUSTOMFUNCTION_GUIINIT Gui
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "Russian"
outfile ted.exe
Function Gui
GetDlgItem $0 $HWNDPARENT 1028
EnableWindow $0 1
SetCtlColors $0 0x0000FF 0x00FF40
FunctionEnd
Section ""
SectionEnd
плагин брэндинг, так делает, т.е с плагином достаточно команды изменения фона и цвета
только после применения плагина
;функция плагина
GetDlgItem $0 $HWNDPARENT 1028
SetCtlColors $0 0x0000FF 0x00FF40
SetCtlColors $mui.Branding.Background ${MUI_BGCOLOR} transparent »
а что дает transparent?
не я как бы знаю что это прозрачность?
но что это даст в данном контексте?
SetCtlColors $mui.Branding.Background ${MUI_BGCOLOR} transparent
это тоже самое как
SetCtlColors $0 0x0000FF transparent
SetCtlColors - команда
$0 - для кого
0x0000FF - цвет объекта
transparent - цвет прозрачности фона
Только одно я не могу понять, а на кой вам этот Branding, придушите его и вместо него используйте простую ссылку, тогда и плагин не нужен.
sawe, это же была одна из проблем, как ее нарисовать там где Branding? ведь контролы 1044 и 1018 мне пришлось поднять выше кнопок, а Branding должен был быть как раз на уровне с кнопками...
это была одна з причин, почему растягивали контрол, что бы иметь возможность в любом месте нарисовать то, что нужно...
но уже и так работает и то хорошо.... осталось так марафет навести по мелочи :)
вы мне лучше вот что скажите
какие единицы измерения использует Resource Hacker?
это явно не пиксели, ибо когда я ввел нужные мне пиксели для размера окна, то итоговое окно оказалось больше пикселей на 200
вот у меня окно должно быть 665 на 485 px
а введено
105 DIALOGEX 0, 0, 440, 285
линеечкой померил,итог - нужный мне размер
как конвертировать единицы что бы не на глаз вводить?
kotkovets
07-10-2011, 22:10
yyv, ликбез (http://www.firststeps.ru/mfc/winapi/dialog/r.php?50)
В NSIS получить базовую единицу:
System::Call "user32::GetDialogBaseUnits()i.R9"
В $R9 - базовая единица
Это вам Вам надо???? это выходит за рамки темы..
Branding должен был быть как раз на уровне с кнопками... »
я же вам несколько раз советовал использовать свои контролы, что бы не зависеть от базового интерфейса.
Ни чего страшного если они будут дублировать базовые, к примеру Branding.
какие единицы измерения использует Resource Hacker »
Вы всё перекрутили, это не Resource Hacker использует странные размеры а NSIS свои, я на глазок юниты NSIS умножаю на 1,5.
Лучше чем kotkovets вам это ни кто не объяснит, если у него хватит терпения.
kotkovets, спасибо, как раз то что надо было... все искал где про вин апи почитать..)
kotkovets
08-10-2011, 01:08
все искал где про вин апи почитать..) »
В справочнике по NSIS читайте: Описание плагинов->System: Вызов функций из внешних библиотек
Там я "вкратце" описал возможности и синтаксис плагина.
подскажите. может есть другая возможность :)
вот я делаю к примеру лейбл
; === Desk (type: Label) ===
${NSD_CreateLabel} 176 80 442 41 "${NEW_DESK_TITLE}"
Pop $hCtl_CustomLicensePage_Desk
CreateFont $hCtl_CustomLicensePage_Desk_Font "Microsoft Sans Serif" "8.25" "400"
SendMessage $hCtl_CustomLicensePage_Desk ${WM_SETFONT} $hCtl_CustomLicensePage_Desk_Font 0
SetCtlColors $hCtl_CustomLicensePage_Desk 0x000000 0xFFFFFF
константа ${NEW_DESK_TITLE} содержит предложение. в котором одно слово мне нужно сделать жирным
сейчас я это делаю так
создаю поверх лейбл с одним нужным словом
делаю ему
CreateFont $hCtl_CustomLicensePage_Desk_Font "Microsoft Sans Serif" "8.25" "700"
и по координатам подгоняю так, что бы он был как раз на месте слова из предложения.
но этот вариант меня не очень устраивает.
может ест возможность делать что-тот типа такого
"текст текст текст текст текст текст <b>этот текст жирный</b>"
что бы не городить лишних конструкций
kotkovets
11-10-2011, 22:22
может ест возможность делать что-тот типа такого
"текст текст текст текст текст текст <b>этот текст жирный</b>"
что бы не городить лишних конструкций »
Нет, контрол один, соответственно и дескриптор контрола тоже один, создайте еще один контрол и подгоните
контрол к предыдущему контролу, чтобы получился "монолитный текст"
Можно пойти по сложному пути, нарисовать контрол - "RichEdit20A" там можно текст подгонять специальными тегами,
но это будет слишком сложно для Вас...
http://nsis.sourceforge.net/LoadRTF
http://nsis.sourceforge.net/Component_descriptions_with_rtf_formatting
Проще нарисовать еще один "Label" :drug:
Требуется найти в $INSTDIR, файл с произвольным именем и расширением .msi
Использую команду FindFirst
Name "Find"
OutFile "Find.exe"
ShowInstDetails show
InstallDir "C:\Find"
Section
FindFirst $0 $1 $INSTDIR\*.msi
loop:
StrCmp $1 "" done
DetailPrint $1
FindNext $0 $1
Goto loop
done:
FindClose $0
MessageBox MB_ICONINFORMATION|MB_OK "В $INSTDIR найден файл $0" IDOK
SectionEnd
По справочнику : в переменную $0 будут помещаться имя файла с расширением
Но в MessageBox вместо внятного имени - набор цифр... Почему ? И что надо сделать ?
kotkovets
13-10-2011, 18:29
Вообще здесь цикл...и значения стремительно меняются
в переменную $0 будут помещаться имя файла с расширением »
В $0 - дескриптор поиска, в переменой $1 - имена файлов
K.A.V. попутал переменные, поэтому страдают неискушенные пользователи :)
------
MKN в твоем примере, сообщение покажет только последний найденный файл.
kotkovets,
Я "искусился", первым делом изменив переменную в
MessageBox MB_ICONINFORMATION|MB_OK "В $INSTDIR найден файл $1" IDOK
Только при этом вообще никакой информации о файле... Файл один, и надо бы узнать его имя и занести в переменную...
kotkovets
13-10-2011, 18:41
MKN немного не то имел ввиду:
StrCmp $1 "" done - выход из цикла, если $1 == пустому значению
Поэтому и будет всегда по окончанию поиска, пустое сообщение.
А имена найденных файлов в $1...
FindFirst $0 $1 $INSTDIR\*.msi
loop:
StrCmp $1 "" done
MessageBox MB_ICONINFORMATION|MB_OK "В $INSTDIR найден файл $1" IDOK
FindNext $0 $1
Goto loop
done:
FindClose $0
Воспользуйся макросом Locate (по индексу в ориг. справке введи)
!include "FileFunc.nsh" - не забудь включить хидер в тело скрипта
Файл один, и надо бы узнать его имя и занести в переменную »
Если ТОЛЬКО ФАЙЛ ОДИН:
FindFirst $0 $1 $INSTDIR\*.msi
MessageBox MB_ICONINFORMATION|MB_OK "$1" IDOK
FindClose $0
Есть ли, надёжные способы удаления в Windows 7 системного, защищённого файла
Поэтому и будет всегда по окончанию поиска, пустое сообщение. »
А как быть когда надо "зафиксировать" в директории несколько неизвестно-разноимённых файлов с необходимым расширением и далее с ними работать (запускать, копировать и т. д. ) ?
Есть ли, надёжные способы удаления в Windows 7 системного, защищённого файла »
А так : с помощью takeown.exe сделать текущего пользователя владельцем файла,
а потом с помощью icacls.exe назначить полный доступ к этому файлу ?
По моему на winreview.ru про это подробно говорилось...
kotkovets
14-10-2011, 09:21
А как быть когда надо "зафиксировать" в директории несколько неизвестно-разноимённых файлов с необходимым расширением и далее с ними работать (запускать, копировать и т. д. ) ? »
1. Cтек для этого есть, у меня в хидере RegistryFunc.nsh (DelregKey.nsh) бывает хранится в стеке до 70 000 значений ключей реестра и все они перебираются по заданной маске.
2. Работаем непосредственно в цикле
FindFirst $0 $1 $INSTDIR\*.msi
loop:
;начало цикла
StrCmp $1 "" done
;---
;---
;всякие нужные команды
FindNext $0 $1
Goto loop
;конец цикла
done:
FindClose $0
А так : с помощью takeown.exe сделать текущего пользователя владельцем файла,
а потом с помощью icacls.exe назначить полный доступ к этому файлу ? »
http://forum.oszone.net/showpost.php?p=1128494
takeown /?
icacls /?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC