2017-12-11 20 views
0


ListView를 사용하여 Windows 설치 프로그램을 만들려고합니다. 내가 지정된 인덱스에서 값을 읽으려고 그러나NSIS ListView - GetItemText 잘못된 값을 반환합니다.

# put the plugin version to list view (in my case value 2.2) 
${NSD_LV_InsertItem} $list $i '$5' 

: 나는 메시지

# get selected item plugin version 
${NSD_LV_GetItemText} $list 0 0 $R0 
MessageBox MB_OK "The text of item 0 is: $R0" 

있어

: 항목 0의 텍스트는 다음과 같습니다 나는 목록보기로 항목을 삽입 할 수 있어요 ▯2
출력이 올바르게 표시되지 않는 이유는 무엇입니까?

감사합니다.

+0

NSIS 버전? 유니 코드? – Anders

답변

0

"▯2"는 UTF-16LE 문자열로 표시된 "2.2"ASCII 문자열입니다.

타사 CommCtrl.nsh 파일이 버그이므로 LVM_ * 정의가 대상에 맞는지 확인해야합니다.

!include nsDialogs.nsh 
!include WinMessages.nsh ; The 3rd-party CommCtrl.nsh file is buggy, include this first to make sure LVM_* is defined correctly 
!ifndef LVM_GETITEMTEXT 
!define /math LVM_GETITEMTEXTA ${LVM_FIRST} + 45 
!define /math LVM_GETITEMTEXTW ${LVM_FIRST} + 115 
${_NSIS_DEFAW} LVM_GETITEMTEXT 
!endif 
!include "CommCtrl.nsh" 
!define /ifndef _COMMCTRL_NSH_VERBOSE ${_COMMCTRL_VERBOSE} 

Page Custom MyPage 

Var /Global List 
Var /Global i 

Function MyPage 
nsDialogs::Create 1018 
Pop $0 

${NSD_CreateListView} 0u 0u 300u 50% "Listview" 
Pop $list 
StrCpy $i 0 
StrCpy $5 "2.2" 
${NSD_LV_InsertColumn} $list 0 200 "column 0" 
${NSD_LV_InsertItem} $list $i '$5' 

${NSD_CreateButton} 0 60% 100% 13u "MsgBox item 0" 
Pop $0 
${NSD_OnClick} $0 DisplayItem0 

nsDialogs::Show 
FunctionEnd 

Function DisplayItem0 
Pop $R0 
${NSD_LV_GetItemText} $list 0 0 $R0 
MessageBox MB_OK "The text of item 0 is: $R0" 
FunctionEnd