Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для kotkovets

Ветеран


Сообщения: 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