使用 NSIS,自定义第二页问题。列表视图/NSISList 文本
Using NSIS, Custom Page Two Question. ListView / NSISList Text
谢谢:]
使用ListView时,韩语不表达,但显示奇怪的字符。 (附照片)并且有些字符很好地包含在列表(NSISList)中,但有些字符没有。我尝试在下面添加源代码,但文本没有正确显示。我需要添加哪些来源才能使文本看起来正确?
我正在使用 NSIS 3.x 版本。
!ifndef LVM_GETITEMTEXT
!define /math LVM_GETITEMTEXTA ${LVM_FIRST} + 45
!define /math LVM_GETITEMTEXTW ${LVM_FIRST} + 115
${_NSIS_DEFAW}LVM_GETITEMTEXT
!endif
enter image description here
- 我会用韩语表达。通过将任何字符添加到列表中来使用它。在添加之前,如果显示为MessageBox,结果很好,将字符添加到List中。但是当我尝试添加它并再次使用它时,字符被截断了,甚至当我将它打印到TextBox时,它也没有出来。基于“대”,其后的字符不存储在List中。
ex) 서대문 = "서", 대구 = ""
Function ListTest
${List.Create} Aerch
${List.Add} Serch "서대문구"
${List.Get} [=10=] Serch 0
MessageBox MB_OK [=10=]
FunctionEnd
; Return [=10=] = 서
您是否尝试过在脚本顶部添加命令“unicode True”?
- 确保您的脚本开头有
Unicode True
。
- 确保将脚本保存为 UTF-8 BOM 或 UTF-16LE BOM。
- !在 commctrl.nsh
之前包含 nsDialogs
- 确保您使用的是所有插件的 Unicode 版本。
“看起来像中文”的字符是将 ASCII 视为 UTF-16 的症状。字符串在第一个字符后被截断是将 UTF-16 视为 ASCII 的症状(不是 Unicode 插件?)。
这对我有用:
Unicode True
RequestExecutionLevel user
!include nsDialogs.nsh
!define _COMMCTRL_NSH_VERBOSE 3
!include commctrl.nsh
Section
SectionEnd
Page custom nsDialogsPage
Var lv
Function msgboxtext
Pop [=10=]
SendMessage $lv ${LVM_GETSELECTIONMARK} 0 0
StrCpy 1
${If} = -1
Return
${EndIf}
System::Call '*(&t${NSIS_MAX_STRLEN})p.r3'
System::Call "*(i, i, i, i, i, p, i, i, i) p (0, 0, , 0, 0, r3, ${NSIS_MAX_STRLEN}) .r1"
System::Call "User32::SendMessage(p, i, p, p) p ($lv, ${LVM_GETITEMTEXT}, , r1)"
System::Call "*(&t${NSIS_MAX_STRLEN} .r4)"
System::Free
System::Free
MessageBox mb_ok
FunctionEnd
Function nsDialogsPage
nsDialogs::Create 1018
Pop [=10=]
${NSD_CreateButton} 0 0 100% 12u "Get text"
Pop
${NSD_OnClick} msgboxtext
nsDialogs::CreateControl /NOUNLOAD ${WC_LISTVIEW} ${__NSD_ListView_STYLE}|${WS_TABSTOP} ${__NSD_ListView_EXSTYLE} 0 13u 100% -13u ""
Pop $lv
${NSD_LV_InsertColumn} $lv 0 100 "column 0"
${NSD_LV_InsertColumn} $lv 1 70 "서대문"
${NSD_LV_InsertItem} $lv 0 '서대문'
${NSD_LV_SetItemText} $lv 0 1 '서대문 서대문'
${NSD_LV_InsertItem} $lv 1 '2 서대문'
${NSD_LV_SetItemText} $lv 1 1 '2.2 서대문 서대문'
nsDialogs::Show
FunctionEnd
谢谢:]
使用ListView时,韩语不表达,但显示奇怪的字符。 (附照片)并且有些字符很好地包含在列表(NSISList)中,但有些字符没有。我尝试在下面添加源代码,但文本没有正确显示。我需要添加哪些来源才能使文本看起来正确? 我正在使用 NSIS 3.x 版本。
!ifndef LVM_GETITEMTEXT
!define /math LVM_GETITEMTEXTA ${LVM_FIRST} + 45
!define /math LVM_GETITEMTEXTW ${LVM_FIRST} + 115
${_NSIS_DEFAW}LVM_GETITEMTEXT
!endif
enter image description here
- 我会用韩语表达。通过将任何字符添加到列表中来使用它。在添加之前,如果显示为MessageBox,结果很好,将字符添加到List中。但是当我尝试添加它并再次使用它时,字符被截断了,甚至当我将它打印到TextBox时,它也没有出来。基于“대”,其后的字符不存储在List中。
ex) 서대문 = "서", 대구 = ""
Function ListTest
${List.Create} Aerch
${List.Add} Serch "서대문구"
${List.Get} [=10=] Serch 0
MessageBox MB_OK [=10=]
FunctionEnd
; Return [=10=] = 서
您是否尝试过在脚本顶部添加命令“unicode True”?
- 确保您的脚本开头有
Unicode True
。 - 确保将脚本保存为 UTF-8 BOM 或 UTF-16LE BOM。
- !在 commctrl.nsh 之前包含 nsDialogs
- 确保您使用的是所有插件的 Unicode 版本。
“看起来像中文”的字符是将 ASCII 视为 UTF-16 的症状。字符串在第一个字符后被截断是将 UTF-16 视为 ASCII 的症状(不是 Unicode 插件?)。
这对我有用:
Unicode True
RequestExecutionLevel user
!include nsDialogs.nsh
!define _COMMCTRL_NSH_VERBOSE 3
!include commctrl.nsh
Section
SectionEnd
Page custom nsDialogsPage
Var lv
Function msgboxtext
Pop [=10=]
SendMessage $lv ${LVM_GETSELECTIONMARK} 0 0
StrCpy 1
${If} = -1
Return
${EndIf}
System::Call '*(&t${NSIS_MAX_STRLEN})p.r3'
System::Call "*(i, i, i, i, i, p, i, i, i) p (0, 0, , 0, 0, r3, ${NSIS_MAX_STRLEN}) .r1"
System::Call "User32::SendMessage(p, i, p, p) p ($lv, ${LVM_GETITEMTEXT}, , r1)"
System::Call "*(&t${NSIS_MAX_STRLEN} .r4)"
System::Free
System::Free
MessageBox mb_ok
FunctionEnd
Function nsDialogsPage
nsDialogs::Create 1018
Pop [=10=]
${NSD_CreateButton} 0 0 100% 12u "Get text"
Pop
${NSD_OnClick} msgboxtext
nsDialogs::CreateControl /NOUNLOAD ${WC_LISTVIEW} ${__NSD_ListView_STYLE}|${WS_TABSTOP} ${__NSD_ListView_EXSTYLE} 0 13u 100% -13u ""
Pop $lv
${NSD_LV_InsertColumn} $lv 0 100 "column 0"
${NSD_LV_InsertColumn} $lv 1 70 "서대문"
${NSD_LV_InsertItem} $lv 0 '서대문'
${NSD_LV_SetItemText} $lv 0 1 '서대문 서대문'
${NSD_LV_InsertItem} $lv 1 '2 서대문'
${NSD_LV_SetItemText} $lv 1 1 '2.2 서대문 서대문'
nsDialogs::Show
FunctionEnd