PDA

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


Страниц : 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 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170

kotkovets
07-10-2011, 17:47
nsDialogs функция PRE занята »
чушь! это параметр макроса, означает объявить пользовательскую функцию,
которая будет выполнена перед открытием странички.

использую BrandingURL plug-in »
ну так и задавайте цвет этим же плагином
BrandingURL::Set /NOUNLOAD [R] [G] [B] [link_url]

yyv
07-10-2011, 17:59
ну так и задавайте цвет этим же плагином »
да, но это же цвет текста
а мне нужно задать цвет фона под текстом
в итоге цвет фона вокруг у меня светло синий
цвет линка черный, а цвет под линком серый прямоугольничек..))

PS Получилось
просто
GetDlgItem $0 $HWNDPARENT 1028
SetCtlColors $0 0x000000 0xEBEBEB
нужно было в другой функции вызывать (там где я диалог строю, а я это делал немного в другом месте)и все

sawe
07-10-2011, 18:08
как мне сделать фон в 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

yyv
07-10-2011, 18:52
SetCtlColors $mui.Branding.Background ${MUI_BGCOLOR} transparent »
а что дает transparent?
не я как бы знаю что это прозрачность?
но что это даст в данном контексте?

sawe
07-10-2011, 19:50
SetCtlColors $mui.Branding.Background ${MUI_BGCOLOR} transparent

это тоже самое как
SetCtlColors $0 0x0000FF transparent

SetCtlColors - команда
$0 - для кого
0x0000FF - цвет объекта
transparent - цвет прозрачности фона

Только одно я не могу понять, а на кой вам этот Branding, придушите его и вместо него используйте простую ссылку, тогда и плагин не нужен.

yyv
07-10-2011, 21:50
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 - базовая единица
Это вам Вам надо???? это выходит за рамки темы..

sawe
07-10-2011, 22:41
Branding должен был быть как раз на уровне с кнопками... »
я же вам несколько раз советовал использовать свои контролы, что бы не зависеть от базового интерфейса.
Ни чего страшного если они будут дублировать базовые, к примеру Branding.
какие единицы измерения использует Resource Hacker »
Вы всё перекрутили, это не Resource Hacker использует странные размеры а NSIS свои, я на глазок юниты NSIS умножаю на 1,5.
Лучше чем kotkovets вам это ни кто не объяснит, если у него хватит терпения.

yyv
08-10-2011, 00:47
kotkovets, спасибо, как раз то что надо было... все искал где про вин апи почитать..)

kotkovets
08-10-2011, 01:08
все искал где про вин апи почитать..) »
В справочнике по NSIS читайте: Описание плагинов->System: Вызов функций из внешних библиотек
Там я "вкратце" описал возможности и синтаксис плагина.

yyv
11-10-2011, 19:59
подскажите. может есть другая возможность :)
вот я делаю к примеру лейбл
; === 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:

MKN
13-10-2011, 18:09
Требуется найти в $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 в твоем примере, сообщение покажет только последний найденный файл.

MKN
13-10-2011, 18:33
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

sawe
13-10-2011, 22:47
Есть ли, надёжные способы удаления в Windows 7 системного, защищённого файла

MKN
14-10-2011, 09:00
Поэтому и будет всегда по окончанию поиска, пустое сообщение. »
А как быть когда надо "зафиксировать" в директории несколько неизвестно-разноимённых файлов с необходимым расширением и далее с ними работать (запускать, копировать и т. д. ) ?

Есть ли, надёжные способы удаления в 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