Цитата BuZzOFF:
А ещё можно сделать так чтоб при выделении элемента отмечался/снимался CheckBox? »
|
Если хотите творить на NSIS "по-настоящему" - углубляйтесь в познание WinAPI (что такое сообщения/уведомления и т.д.) и будет вам счастье
Код:
![Выделить весь код](images/misc/selectcode.png)
!include "MUI2.nsh"
!include "CommCtrl_.nsh" ; из Спрвочника !
OutFile "LISTVIEW-CHECKBOXES.exe"
RequestExecutionLevel user
Page custom CreatePage
!insertmacro MUI_LANGUAGE "English"
Function CreatePage
!insertmacro MUI_HEADER_TEXT "LISTVIEW-CHECKBOXES" "LISTVIEW-CHECKBOXES"
nsDialogs::Create 1018
Pop $0
${NSD_CreateListView} 0u 0u 300u 120u "ListView"
Pop $1
SendMessage $1 ${LVM_SETBKCOLOR} 0 0xC7EDCC
SendMessage $1 ${LVM_SETTEXTBKCOLOR} 0 0xC7EDCC
${NSD_LV_InsertColumn} $1 0 150 "Заголовок - Столбец 1"
!define /math _LISTVIEW_TEMP_STYLE ${LVS_EX_CHECKBOXES} | ${LVS_EX_FULLROWSELECT}
SendMessage $1 ${LVM_SETEXTENDEDLISTVIEWSTYLE} 0 ${_LISTVIEW_TEMP_STYLE}
!undef _LISTVIEW_TEMP_STYLE
${NSD_OnNotify} $1 OnClickListView
; =========================================================================
FileOpen $4 "$EXEDIR\myfile.txt" r
loop:
FileRead $4 $9 ; в $9 заносится содержимое строк из файла $4 ( построчно, с каждым циклом)
IntOp $R3 $R3 + 1 ; счетчик Item_ов
${NSD_LV_InsertItem} $1 $R3 "$9" ; создание Item_ов в ListView
IfErrors +1 loop
FileClose $4
; =================================================================
; Установить состояние чекбоксов
${NSD_LV_SetCheckState} $1 0 1 ; отмечен
${NSD_LV_SetCheckState} $1 1 0 ; не отмечен
${NSD_LV_SetCheckState} $1 2 1 ; отмечен
; и т.д.
; кнопка контроля состояния чекбоксов
${NSD_CreateButton} 0u 124u 300u 15u "Проверка состояния чекбоксов" ;
Pop $2
${NSD_OnClick} $2 CheckItemState
nsDialogs::Show
System::Call `comctl32::ImageList_Destroy(iR0)`
FunctionEnd
Function CheckItemState
${NSD_LV_GetCheckState} $1 0 $R0
${NSD_LV_GetCheckState} $1 1 $R1
${NSD_LV_GetCheckState} $1 2 $R2
; и т.д.
IntCmp $R0 1 0 +2
StrCpy $R4 "$R4$\r$\n отмечен 0"
IntCmp $R1 1 0 +2
StrCpy $R4 "$R4$\r$\n отмечен 1"
IntCmp $R2 1 0 +2
StrCpy $R4 "$R4$\r$\n отмечен 2"
; и т.д.
MessageBox MB_OK|MB_ICONINFORMATION "$R4"
FunctionEnd
Function OnClickListView
System::Store SR2R1R0
${Select} $R1
${Case} ${NM_CLICK} ; если событие - клик мыши
SendMessage $R2 ${LVM_GETHOTITEM} 0 0 $0 ; узнаём, на какой элемент пользователь нажал
${NSD_LV_GetCheckState} $1 $0 $2 ; узнаём статус галочки - стоит или не стоит
${If} $2 == "1" ; если галочка стоит
${NSD_LV_SetCheckState} $1 $0 0 ; снимаем галочку
${Else}
${NSD_LV_SetCheckState} $1 $0 1 ; ставим галочку, если не стоит
${EndIf}
${EndSelect}
System::Store L
FunctionEnd
Section
SectionEnd