Ветеран
Сообщения: 1216
Благодарности: 486
|
Профиль
|
Отправить PM
| Цитировать
Цитата sawe:
Можно ли, создать кустомную страницу используя nsDialog для отображения страницы СтартМеню »
|
Вот пример, сливаем архив Listview.zip отсюда подключаем библиотеку CommCtrl.nsh
читать дальше »
Код:
!include "MUI2.nsh"
!include "CommCtrl.nsh"
!include "FileFunc.nsh"
!insertmacro Locate
Name "ListView"
Caption "ListView DetailPrint"
OutFile StartMenu.exe
ShowInstDetails show
!define PROGRAMS "Test ListView"
Page custom CreatePage LeavePage
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "Russian"
Var Dialog
Var ListView
Var Text
Var Item
Var CheckBox
Var STARTMENUFOLDER
Var Check
Function CreatePage
!insertmacro MUI_HEADER_TEXT `Listview control SMPROGRAMS` \
`A ListView control created by nsDialogs plugin`
nsDialogs::Create 1018
Pop $Dialog
${NSD_CreateText} 0 0u 100% 12u `${PROGRAMS}`
Pop $Text
${NSD_SetFocus} $Text
${NSD_CreateListView} 0 20u 100% 75% ``
Pop $ListView
${NSD_LV_InsertColumn} $ListView 0 425 `« меню Пуск -> Программы »`
${NSD_CreateCheckBox} 0u 130u 200u 12u "Не создавать ничего в « меню Пуск -> Программы »"
Pop $CheckBox
${NSD_OnClick} $CheckBox fnCheckBox
SetShellVarContext all
System::Alloc 512
Pop $R5
System::Call `comctl32::ImageList_Create(i16,i16,i${ILC_MASK}|${ILC_COLOR32},i0,i0)i.R4` ; создаем массив изображений
StrCpy $Item "-1"
${Locate} "$SMPROGRAMS" "/L=D /G=0" "SMPROGRAMS"
SendMessage $ListView ${LVM_SETIMAGELIST} ${LVSIL_SMALL} $R4 ;ложим ImageList на ListView
SendMessage $ListView ${LVM_SETEXTENDEDLISTVIEWSTYLE} ${LVS_EX_LABELTIP} ${LVS_EX_LABELTIP} ;подсказка, если текст за выходит заграницу ListView
SendMessage $ListView ${LVM_SETEXTENDEDLISTVIEWSTYLE} ${LVS_EX_FULLROWSELECT} ${LVS_EX_FULLROWSELECT} ;полное выделение
;SendMessage $ListView ${LVM_SETEXTENDEDLISTVIEWSTYLE} ${LVS_EX_GRIDLINES} ${LVS_EX_GRIDLINES} ;добавляем линии в ListView
${NSD_OnNotify} $ListView GetNamePROGRAMS
nsDialogs::Show
System::Call `comctl32::ImageList_Destroy(iR4)`
System::Free $R5
FunctionEnd
Function fnCheckBox
Pop $CheckBox
${NSD_GetState} $CheckBox $Check
${If} $Check = 1
EnableWindow $Text 0
EnableWindow $ListView 0
${ElseIf} $Check = 0
EnableWindow $Text 1
EnableWindow $ListView 1
${EndIf}
FunctionEnd
Function SMPROGRAMS
IntOp $Item $Item + 1
System::Call 'shell32::SHGetFileInfo(tR9,i0,iR5,i352,\
i${SHGFI_ICON}|${SHGFI_SMALLICON}|${SHGFI_DISPLAYNAME})' ;выдергиваем иконки из папки через кэш проводника
System::Call "*$R5(i.R3)" ;массив иконок
System::Call "comctl32::ImageList_AddIcon(iR4,iR3)" ;добавляем иконку в ImageList
System::Call `user32::DestroyIcon(iR3)`
System::Call `kernel32::FreeLibrary(iR4)`
${NSD_LV_InsertItem} $ListView $Item $R7 ;создаем итемы в ListView
${NSD_LV_SetItemImage} $ListView $Item $Item
Push $0
FunctionEnd
Function GetNamePROGRAMS ;обработка события отметки
System::Store SR1R1R0 ;приватный стек с идентификаторами
${Select} $R1
${Case} ${LVN_ITEMCHANGED} ; признак, событие отметки итема
System::Call "*$R0(i,i,i,i.R2,i,i,i,i,i,i)" ; находим индекс отмеченного итема
${NSD_LV_GetItemText} $ListView $R2 0 "$STARTMENUFOLDER" ;по найденному индексу считываем текст итема
${NSD_SetText} $Text "$STARTMENUFOLDER\${PROGRAMS}" ; кидаем текст в поле ввода
${CaseElse}
${EndSelect}
System::Store L
FunctionEnd
Function LeavePage
${NSD_GetState} $CheckBox $Check
${If} $Check = 0
${NSD_GetText} $Text "$STARTMENUFOLDER"
${EndIf}
FunctionEnd
Section Main
${If} $Check = 0
DetailPrint $SMPROGRAMS\$STARTMENUFOLDER
CreateDirectory "$SMPROGRAMS\$STARTMENUFOLDER" ;создаем папку в меню Пуск -> Программы
${EndIf}
SectionEnd
Цитата funtykin:
необходимо реализовать диалоговое окно в котором нужно указать фаил и скопировать его в дальнейшем в путь установки. »
|
Пример на интерфейсе MUI2
читать дальше »
Код:
OutFile "setup.exe"
ShowInstDetails show
InstallDir "$PROGRAMFILES\TEsT"
!include "MUI2.nsh"
!include "FileFunc.nsh"
!insertmacro GetFileName
Page custom SelectFile
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "Russian"
Var Dialog
Var Button
Var FILEPATH
Var FILENAME
Function SelectFile
!insertmacro MUI_HEADER_TEXT `Диалог выбора файла для копирования` `Сontrol created by nsDialogs plugin`
nsDialogs::Create 1018
Pop $Dialog
${NSD_CreateButton} 0 0 60u 14u "Выбор файла"
Pop $Button
${NSD_OnClick} $Button Button ;обработка события на клик кнопки
nsDialogs::Show
FunctionEnd
Function Button ;функция обработки события
Pop $Button
nsDialogs::SelectFileDialog "" "*.*" ;диалог выбора файла
Pop $FILEPATH ;в переменной FILEPATH - путь к выбранному файлу
FunctionEnd
Section "CopyFile"
SetOutPath "$INSTDIR"
${If} $FILEPATH != '' ;если не выбран файл, то пропустить копирование
${GetFileName} "$FILEPATH" "$FILENAME" ;из пути к файлу вытаскиваем имя файла
CopyFiles /Silent "$FILEPATH" "$INSTDIR\$FILENAME"
${EndIf}
SectionEnd
Цитата Tankan:
если мне нужна упаковка с сильным сжатием»
|
Я всегда пакую файлы таким образом, и чаще всего 7-zip отдыхает:
Код:
SetCompressor /SOLID LZMA
SetCompressorDictSize 64 ;или 128, зависит от оперативки компа, максимум 170
SetDatablockOptimize on
|
-------
Спасибо ВСЕМ за то, что тратите свое время, что бы ПОМОЧЬ МНЕ.
Последний раз редактировалось kotkovets, 20-06-2011 в 16:20.
Причина: добавил различное отображение иконок, если в папке программ нестандартное отображение папок
Отправлено: 17:53, 18-06-2011
| #1271
|