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
02-10-2011, 16:20
wolkow70, можно наверно через апи, а чем не устраивает "бейсик" ????

wolkow70
02-10-2011, 16:28
чем не устраивает "бейсик" »
Тем, что я в нем ни --- не понимаю.

SetShellVarContext current
CreateShortCut "$QUICKLAUNCH\User Pinned\TaskBar\Daum PotPlayer.lnk" "$INSTDIR\PotPlayerMini.exe"

Как нибудь так не выйдет?


По такому адресу ярлыки нашел:

C:\Users\User\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar

kotkovets
02-10-2011, 17:03
Тем, что я в нем ни --- не понимаю »
:) Запуск происходит такой: PinToTasckbar.vbs "Путь к приложению, к которому нужен ярлык"
Ярлык создается для текущего пользователя, кто запустил у того и будет ярлык.
CreateShortCut "$QUICKLAUNCH\User Pinned\TaskBar\Daum PotPlayer.lnk" "$INSTDIR\PotPlayerMini.exe"
Как нибудь так не выйдет? »
Нет!
1 запуск только от Vista и выше ОС
2. проверьте, где создается ярлык, и если он есть, то в деинсталляторе запускаем скрипт на удаление ярлыка.
папка: C:\Users\UserName\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar
ярлык: Имя заголовка приложение.lnk

wolkow70
02-10-2011, 17:14
kotkovets,

При таком коде:
SetShellVarContext current
CreateShortCut "$QUICKLAUNCH\User Pinned\TaskBar\Daum PotPlayer.lnk" "$INSTDIR\PotPlayerMini.exe"
ярлык создался по адресу C:\Users\User\Application Data\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\Daum PotPlayer.lnk
Но, в панели он визуально не появился. Перезагрузил систему, но, ярлык так и не появился. Хотя, в папке с ярлыками он есть. Видимо, его в реестр надо еще прописать. Программа из этого ярлыка вручную запускается.

wolkow70
02-10-2011, 17:55
Закрепленные ярлыки хранятся в реестре
HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Taskband в двоичном коде...

MKN
03-10-2011, 16:02
Подскажите пожалуйста, как на собственной кастомной странице реализовать выбор директории установки ?

В доке http://nsis.sourceforge.net/Docs/nsDialogs/Readme.html#ref-selectfolderdialog только одна строчка :
SelectFolderDialog
nsDialogs::SelectFolderDialog title initial_selection
и что с ней дальше делать ?
В примерах NSIS\Examples\nsDialogs\InstallOptions.nsi - нечто подходящеее, но реализованное , как я понял, через INI файл... Тоже не то...

kotkovets
03-10-2011, 16:16
Подскажите пожалуйста, как на собственной кастомной странице реализовать выбор директории установки ? »
Все очень просто:
!include "MUI2.nsh"

Page custom SelectDirectory Directory
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "Russian"

Name "Winreview.ru"
OutFile "winreview.exe"
ShowInstDetails show

InstallDir "$PROGRAMFILES\Soft"

Var Dialog
Var Text
Var Button

Function SelectDirectory
nsDialogs::Create 1018
Pop $Dialog
${NSD_CreateText} 0 50u 240u 12u "$INSTDIR"
Pop $Text
${NSD_CreateButton} 250u 50u 50u 13u "Выбор"
Pop $Button
${NSD_OnClick} $Button Button
nsDialogs::Show
FunctionEnd

Function Button
Pop $Button
nsDialogs::SelectFolderDialog "Выбор директории -=MKN=-" "$WINDIR"
Pop `$INSTDIR`
${If} `$INSTDIR` != error
${NSD_SetText} $Text `$INSTDIR`
${EndIf}
FunctionEnd

Function Directory
${NSD_GetText} $Text `$INSTDIR`
${If} `$INSTDIR` == ""
Abort
${EndIf}
FunctionEnd

Section
MessageBox MB_OK "$INSTDIR" IDOK
SectionEnd

MKN
03-10-2011, 16:35
Ещё такой вопрос : после редактировании ресурса NSIS\Contrib\UIs\modern.exe (размера окна) у меня посреди страницы
застряло начало BRANDING_а "Nuls.... " далеее обрыв. Где это дело находится, в каком ресурсе и как его устранить ?

Также интересует, возможно ли использовать два ресурса MUI для разных страниц - к примеру для кастомной -откорректированный modern.exe, а для прочих, родной modern.exe ?

kotkovets
03-10-2011, 17:01
Где это дело находится, в каком ресурсе »
105 диалог, ID=1028
по умолчанию:
CONTROL "", 1028, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_GROUP, 5, 188, 322, 8

sawe
03-10-2011, 18:12
Также интересует, возможно ли использовать два ресурса MUI для разных страниц »
К сожалению нет или пока нет, можно только использовать примерно следующее:



!define MUI_UI "${NSISDIR}\Contrib\UIs\modern.exe" ;или "ваш_путь\modern.exe"
;и ещё
!define MUI_HEADERIMAGE
!define MUI_HEADERIMAGE_BITMAP "ваш_путь\Header.bmp"

; ваш изменённый при условии, что вы ранее объявили !define MUI_HEADERIMAGE и !define MUI_HEADERIMAGE_BITMAP
!define MUI_UI_HEADERIMAGE "ваш_путь\modern_header.exe" ; только один 105 с вашими исправленными ID

; и немного вашей правки в функции для графики
!define MUI_CUSTOMFUNCTION_GUIINIT myGUIInit ; объявить функцию для графики

Function myGUIInit
GetDlgItem $0 $HWNDPARENT 1039 ; получить контрол
System::Call 'User32::DestroyWindow(ir0)' ; придушить контрол

GetDlgItem $R1 $HWNDPARENT 1037 ; получить контрол заглавия
SetCtlColors $R1 0xFFFFFF transparent ; установить цвет и прозрачность фона
CreateFont $1 "Constantia" 16 700 /ITALIC ; установить свойства шрифта
SendMessage $R1 ${WM_SETFONT} $1 0 ; отобразить

GetDlgItem $R0 $HWNDPARENT 1256 ; получить контрол брендинга
SetCtlColors $R0 0xABBFCE transparent ; установить цвет и прозрачность фона
CreateFont $1 "Arial" 8 10 ; установить свойства шрифта
SendMessage $R0 ${WM_SETFONT} $1 0 ; отобразить

ShowWindow $0 ${SW_SHOW} ; показать, что у вас там получилось
FunctionEnd

MKN
04-10-2011, 08:52
kotkovets,

Несколько вопросов по кастомной странице :

Поясни пожалуйста назначение Function Directory в твоём примере. (И почему то без неё, выбор директории установки работает, а с ней - ругань при компиляции...)

И где в коде должна быть запись : Page custom SelectDirectory Directory ?
Ведь пользовательская страница уже создана записью типа : Page custom fnCustomInit fnCustomDestroy

Каким образом осуществляется зависимое (ИЛИ-ИЛИ) переключение чекбоксов (двух и более) в коде кастомной страницы ?

Почему при создании GroupBox имеем только надпись над группой, а не сам чекбокс, как при создании на обычной странице,(отключающий\включающий все чекбоксы, входящие в группу) ? Что для этого надо сделать ?

Как реализовать отметку всех имеющихся на странице чекбоксов при помощи одной (или двух ?) кнопки ?
Т.е. имеется несколько десятков чекбоксов (в группах в том числе). Нажал кнопку - все отмечены. Ещё раз нажал (или нажал вторую кнопку ?) - отметки сняты.

kotkovets
04-10-2011, 10:39
И где в коде должна быть запись : Page custom SelectDirectory Directory »
В начале кода, где идет объявление страниц..
Page custom pre post
pre - имя функции[Функция которая будет выполнена при выполнении своей странички]
post - имя функции[Функция которая будет выполнена при закрытии странички]
Таким образом можно объявлять множесто своих страничек, эти странички
и команды, функции в страничках - не работают при тихом режиме.
Каким образом осуществляется зависимое (ИЛИ-ИЛИ) переключение чекбоксов (двух и более) в коде кастомной страницы ? »
Если ты имеешь в виду чекбоксы - то такое переключение сложно в реализации.
Флажок-точка(радиобутоны) - системные контролы, зависимое переключение получается через системные ресурсы
Если радиобутонов много, можно объединить в свои группы переключений.
http://nsis.sourceforge.net/NsDialogs_FAQ (How to create two groups of RadioButtons)
Как реализовать отметку всех имеющихся на странице чекбоксов при помощи одной (или двух ?) кнопки ?
Т.е. имеется несколько десятков чекбоксов (в группах в том числе). Нажал кнопку - все отмечены. Ещё раз нажал (или нажал вторую кнопку ?) - отметки сняты. »
Нужно реализовавать функции обработки событий. В справочнике по NSIS рассказано как это делать.
http://nsis.sourceforge.net/NsDialogs_FAQ
nsDialogs::OnClick [хэндл контрола] [имя функции]
Определять статусы контролов, как первоначальные, так при обработке событий
${NSD_SetState} [хэндл контрола] 1 - статус отмеченный, 0 - наоборот
В функции, которая будет выполнена при закрытии странички удобно снимать статусы чекбоксов, радиобутонов
${NSD_GetState} [хэндл контрола] $var
$var = 0 -> чекбокс, радиобутон не отмечен, 1 -> наоборот

kotkovets
04-10-2011, 13:07
MKN, Пример к всему вышесказанному, будет полезно всем:

!include "MUI2.nsh"

Page Custom pre post
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE Russian
OutFile "test.exe"
ShowInstDetails show

var dialog
var RadioButton1
var RadioButton2
var RadioButton3
var RadioButton4

var CheckBox1
var CheckBox2
var CheckBox3
var CheckBox4

var Check1
var Check2
var Check3
var Check4

var rButton1
var rButton2
var rButton3
var rButton4

var Button
var Button1

Function pre
nsDialogs::Create 1018
Pop $dialog
${NSD_CreateRadioButton} 0 0 40% 6% "Группа_1, Радио_1"
Pop $RadioButton1
${NSD_SetState} $RadioButton1 1 ;Группа_1, радио_1 при показе странички, делаем отмеченным
${NSD_CreateRadioButton} 0 12% 40% 6% "Группа_1, Радио_2"
Pop $RadioButton2
${NSD_AddStyle} $RadioButton1 ${WS_GROUP} ;определяем группу переключений 1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
${NSD_CreateRadioButton} 50% 0 40% 6% "Группа_2, Радио_1"
Pop $RadioButton3
${NSD_SetState} $RadioButton3 1 ;Группа_2, радио_1 при показе странички, делаем отмеченным
${NSD_CreateRadioButton} 50% 12% 40% 6% "Группа_2, Радио_2"
Pop $RadioButton4
${NSD_AddStyle} $RadioButton3 ${WS_GROUP} ;определяем группу переключений 2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
${NSD_CreateButton} 40u 40u 140u 15u `Кнопка переключений радиобутонов`
Pop $Button
${NSD_OnClick} $Button ButtonClick
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
${NSD_CreateCheckBox} 0 65u 56u 12u "Чебокс_1"
Pop $CheckBox1
${NSD_CreateCheckBox} 0 85u 56u 12u "Чебокс_2"
Pop $CheckBox2
${NSD_CreateCheckBox} 150u 65u 56u 12u "Чебокс_3"
Pop $CheckBox3
${NSD_CreateCheckBox} 150u 85u 56u 12u "Чебокс_4"
Pop $CheckBox4
;все чебоксы отмечены
${NSD_SetState} $CheckBox1 1
${NSD_SetState} $CheckBox2 1
${NSD_SetState} $CheckBox3 1
${NSD_SetState} $CheckBox4 1
${NSD_CreateButton} 40u 105u 140u 15u `Кнопка переключений чекбоксов`
Pop $Button1
${NSD_OnClick} $Button1 ButtonClickCheckBox
nsDialogs::Show
FunctionEnd

Function ButtonClick ;функция обработки события нажатия кнопки
Pop $Button
${NSD_GetState} $RadioButton1 $rButton1
${NSD_GetState} $RadioButton2 $rButton2
${NSD_GetState} $RadioButton3 $rButton3
${NSD_GetState} $RadioButton4 $rButton4
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Логика И-ИЛИ для группы 1
${If} $rButton1 == 1
${AndIf} $rButton2 == 0
${NSD_SetState} $RadioButton1 0
${NSD_SetState} $RadioButton2 1
${Else}
${NSD_SetState} $RadioButton1 1
${NSD_SetState} $RadioButton2 0
${EndIf}
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Логика И-ИЛИ для группы 2
${If} $rButton3 == 1
${AndIf} $rButton4 == 0
${NSD_SetState} $RadioButton3 0
${NSD_SetState} $RadioButton4 1
${Else}
${NSD_SetState} $RadioButton3 1
${NSD_SetState} $RadioButton4 0
${EndIf}
FunctionEnd

Function ButtonClickCheckBox
Pop $Button1
;снимаем статусы чекбоксов:
${NSD_GetState} $CheckBox1 $Check1
${NSD_GetState} $CheckBox2 $Check2
${NSD_GetState} $CheckBox3 $Check3
${NSD_GetState} $CheckBox4 $Check4
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Логика ИЛИ-ИЛИ для чекбоксов
${If} $Check1 == 1
${Orif} $Check2 == 1
${Orif} $Check3 == 1
${Orif} $Check4 == 1
${NSD_SetState} $CheckBox1 0
${NSD_SetState} $CheckBox2 0
${NSD_SetState} $CheckBox3 0
${NSD_SetState} $CheckBox4 0
${Else}
${NSD_SetState} $CheckBox1 1
${NSD_SetState} $CheckBox2 1
${NSD_SetState} $CheckBox3 1
${NSD_SetState} $CheckBox4 1
${EndIf}
FunctionEnd

Function post
;снимаем статусы радибутонов:
${NSD_GetState} $RadioButton1 $rButton1
${NSD_GetState} $RadioButton2 $rButton2
${NSD_GetState} $RadioButton3 $rButton3
${NSD_GetState} $RadioButton4 $rButton4
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;снимаем статусы чекбоксов:
${NSD_GetState} $CheckBox1 $Check1
${NSD_GetState} $CheckBox2 $Check2
${NSD_GetState} $CheckBox3 $Check3
${NSD_GetState} $CheckBox4 $Check4
FunctionEnd

Section ""
DetailPrint "состояние Чебокс_1 == $Check1"
DetailPrint "состояние Чебокс_2 == $Check2"
DetailPrint "состояние Чебокс_3 == $Check3"
DetailPrint "состояние Чебокс_4 == $Check4"
DetailPrint "========================================"
DetailPrint "========================================"
DetailPrint "состояние Группа_1, Радио_1 == $rButton1"
DetailPrint "состояние Группа_1, Радио_2 == $rButton2"
DetailPrint "состояние Группа_2, Радио_1 == $rButton3"
DetailPrint "состояние Группа_2, Радио_2 == $rButton4"
SectionEnd

MKN
04-10-2011, 17:57
Что то не вышло использовать для $INSTDIR (InstallDir "$SysDrive:\App") переменную системного диска по способу
StrCpy $SysDrive $WINDIR 2 в Function .onInit.
Есть ли какие иные способы для $INSTDIR ?

зы А почему собственно в NSIS нет переменной системного диска ?

kotkovets
04-10-2011, 18:21
зы А почему собственно в NSIS нет переменной системного диска ? »
А зачем, если есть системные???
Почитай синтаксис StrCpy - очень полезно для разбора строк, советую!
открываем справку по nsis -> Перевод справки NSIS -> ExpandEnvStrings
В справке почти все есть, для создания среднестатического дистрибутива!

Function .OnInit
ExpandEnvStrings $INSTDIR "%SYSTEMDRIVE%\App"
FunctionEnd

InstallDir "$INSTDIR"

Красиво и со вкусом!

MKN
05-10-2011, 09:34
Подскажите , как решить такую задачу :
Создал прогресс бар на кастомной странице :
Var ProgressBar1
${NSD_CreateProgressBar} координаты-размеры ""
Pop $ProgressBar1
А как заставить его "действовать", т.е. отображать реальный ход установки, после клика на "Установить" ?
В примерах всюду какой то Timer применяют... Или это для демонстрационной автономной "презентации" ?

ps Хорошо бы дополнить справочник по NSIS, в разделе кастомные страницы, расширенным описанием и конкретными примерами для разных вариантов установок. А то сейчас по этому вопросу, информации обзорна и крайне скупа...

kotkovets
05-10-2011, 10:49
А как заставить его "действовать", т.е. отображать реальный ход установки, после клика на "Установить" ? »
После каждой команды изменяем позицию прогресса на 10%
и снимаем позицию бара - помещаем текст позиции над баром.

SendMessage $PROGBAR ${PBM_SETPOS} 0 10
SendMessage $PROGBAR ${PBM_GETPOS} 0 0 $1
${NSD_SetText} $Text $1%

!include LogicLib.nsh
!include nsDialogs.nsh

Name "nsDialogs Timer Example"
OutFile "nsDialogs Timer Example.exe"
XPStyle on

Var DIALOG
Var TEXT
Var PROGBAR
Var Button

Page custom nsDialogsPage

Function CreateFile
Pop $Button
FileOpen $4 text.txt a

SendMessage $PROGBAR ${PBM_GETPOS} 0 0 $1
SendMessage $PROGBAR ${PBM_SETPOS} 0 0
${NSD_SetText} $Text $1%
FileWrite $4 "${__FUNCTION__} $1$\r$\n"

Sleep 500 ;пауза для наглядности
SendMessage $PROGBAR ${PBM_DELTAPOS} 10 0
SendMessage $PROGBAR ${PBM_GETPOS} 0 0 $1
${NSD_SetText} $Text $1%
FileWrite $4 "${__FUNCTION__} $1$\r$\n"

Sleep 500 ;пауза для наглядности
SendMessage $PROGBAR ${PBM_DELTAPOS} 10 0
SendMessage $PROGBAR ${PBM_GETPOS} 0 0 $1
${NSD_SetText} $Text $1%
FileWrite $4 "${__FUNCTION__} $1$\r$\n"

Sleep 500 ;пауза для наглядности
SendMessage $PROGBAR ${PBM_DELTAPOS} 10 0
SendMessage $PROGBAR ${PBM_GETPOS} 0 0 $1
${NSD_SetText} $Text $1%
FileWrite $4 "${__FUNCTION__} $1$\r$\n"

Sleep 500 ;пауза для наглядности
SendMessage $PROGBAR ${PBM_DELTAPOS} 10 0
SendMessage $PROGBAR ${PBM_GETPOS} 0 0 $1
${NSD_SetText} $Text $1%
FileWrite $4 "${__FUNCTION__} $1$\r$\n"

Sleep 500 ;пауза для наглядности
SendMessage $PROGBAR ${PBM_DELTAPOS} 10 0
SendMessage $PROGBAR ${PBM_GETPOS} 0 0 $1
${NSD_SetText} $Text $1%
FileWrite $4 "${__FUNCTION__} $1$\r$\n"

Sleep 500 ;пауза для наглядности
SendMessage $PROGBAR ${PBM_DELTAPOS} 10 0
SendMessage $PROGBAR ${PBM_GETPOS} 0 0 $1
${NSD_SetText} $Text $1%
FileWrite $4 "${__FUNCTION__} $1$\r$\n"

Sleep 500 ;пауза для наглядности
SendMessage $PROGBAR ${PBM_DELTAPOS} 10 0
SendMessage $PROGBAR ${PBM_GETPOS} 0 0 $1
${NSD_SetText} $Text $1%
FileWrite $4 "${__FUNCTION__} $1$\r$\n"

Sleep 500 ;пауза для наглядности
SendMessage $PROGBAR ${PBM_DELTAPOS} 10 0
${NSD_SetText} $Text $1%
FileWrite $4 "${__FUNCTION__} $1$\r$\n"

Sleep 500 ;пауза для наглядности
SendMessage $PROGBAR ${PBM_DELTAPOS} 10 0
SendMessage $PROGBAR ${PBM_GETPOS} 0 0 $1
${NSD_SetText} $Text $1%
FileWrite $4 "${__FUNCTION__} $1$\r$\n"

Sleep 500 ;пауза для наглядности
SendMessage $PROGBAR ${PBM_DELTAPOS} 10 0
SendMessage $PROGBAR ${PBM_GETPOS} 0 0 $1
${NSD_SetText} $Text $1%
FileWrite $4 "${__FUNCTION__} $1$\r$\n"
FileClose $4

MessageBox MB_OK "Файл успешно создан!" IDOK
FunctionEnd

Function nsDialogsPage
nsDialogs::Create 1018
Pop $DIALOG
${NSD_CreateLabel} 0u 0u 100% 9u ""
Pop $TEXT
${NSD_CreateProgressBar} 0u 10u 100% 12u "99"
Pop $PROGBAR
${NSD_CreateButton} 90u 70u 70u 12u "Создать файл"
Pop $Button
${NSD_OnClick} $Button CreateFile
nsDialogs::Show
FunctionEnd

Section
SectionEnd

sawe
05-10-2011, 14:46
То есть, можно сделать и обратное продвижение бара?

MKN
05-10-2011, 15:19
kotkovets,
Пример с баром красивый и наглядный, но это ведь будет отдельная задача, выполняемая при клике на конкретную новую кнопку "Создать файл", на имеющейся кастомной странице.

А как быть , если на этой странице уже есть куча чекбоксов, с поставленной для них задачей, исходя из их состояния ?
А задача эта будет выполнена так, как уже указано в Function fnCustomDestroy (причём после закрытия страницы, т.е после нажатия стандартной кнопки "Установить")...

А если надо, чтобы задачи связанные с состоянием чекбоксов, были выполнены при нажатии кнопки "Создать файл" (Или всё таки можно при нажатии кнопки "Установить" ?) с индикацией прогресс баром, при открытой странице ?
Получается надо как то перестроить все действия ? Как ?

kotkovets
05-10-2011, 15:29
То есть, можно сделать и обратное продвижение бара? »
Все что угодно..
Пример использования таймера - системный цикл, который порождает отдельный поток основной программы, "многопоточное приложение",
на примере таймер обновляет время частотой в 200 миллисекунд
!include LogicLib.nsh
!include nsDialogs.nsh

Name "nsDialogs Timer Example"
OutFile "nsDialogs Timer Example.exe"
XPStyle on

Var DIALOG
Var TEXT

Page custom nsDialogsPage

Function Time
System::Alloc 1024
Pop $0
System::Call "kernel32::GetTimeFormat(i0,i0,i0,i0,ir0,i1024)"
System::Call "*$0(&t1024.r1)"
System::Free $0
${NSD_SetText} $TEXT $1
FunctionEnd

Function nsDialogsPage
nsDialogs::Create 1018
Pop $DIALOG
System::Alloc 1024
Pop $0
System::Call "kernel32::GetTimeFormat(i0,i0,i0,i0,ir0,i1024)"
System::Call "*$0(&t1024.r1)"
System::Free $0
${NSD_CreateLabel} 80u 40u 140u 59u ""
Pop $TEXT
CreateFont $1 "Times New Roman" "19" "700"
SendMessage $TEXT ${WM_SETFONT} $1 1

${NSD_SetText} $TEXT $1
${NSD_CreateTimer} Time 200
nsDialogs::Show
FunctionEnd

Section
SectionEnd

(Или всё таки можно при нажатии кнопки "Установить" ?) »
А чет ты привязался к кнопке установить? Мы работаем с кастомными страничками, стандартная страничка установки отбой! по логике,работаем с баром своим, подумай по чему!
Создаем еще страничку свою с прогрессом, типа нажали кнопку, неужели так трудно подумать и включить мозг :) и конечная стандартная страничка финиша........




© OSzone.net 2001-2012