Что нового

Получить полный вывод после выполнения _GUICtrlListView_EditLabel

gmtnzxer

Новичок
Сообщения
1
Репутация
0
Здравствуйте!
Есть скрипт, создающий форму и ListView с флагом $LVS_EDITLABELS и с контекстным меню для переименования ячеек.
При переименовании происходит вывод введенного текста в консоль, а затем возвращается True для подтверждения переименования.
Дело в том, что вывод получается неполный. В случае с английскими буквами выводит в консоль только первую букву, с русскими - полный, но кракозябрами. Что делать? Может есть альтернативный вариант словить введенный текст до вывода его в ListView?
Код:
#include <GUIConstantsEx.au3>
#include <GUIListView.au3>
#include <WindowsConstants.au3>

Opt('GUIOnEventMode', 1)

#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 505, 281, 192, 124)
GUISetOnEvent($GUI_EVENT_CLOSE, 'quit')

$List1 = GUICtrlCreateListView("test|test", 8, 8, 489, 266, $LVS_EDITLABELS)
GUICtrlCreateListViewItem('1|2', $List1)
GUICtrlCreateListViewItem('3|4', $List1)
$ContextMenu = GUICtrlCreateContextMenu($List1)
$Rename = GUICtrlCreateMenuItem("Rename", $ContextMenu)
GUICtrlSetOnEvent($Rename, 'Rename')

GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
    Sleep(10)
WEnd

Func WM_NOTIFY($hWnd, $iMsg, $WParam, $LParam)
    #forceref $hWnd, $iMsg, $WParam

    Local $tNMHDR = DllStructCreate($tagNMLISTVIEW, $LParam)
    Local $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    Local $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $iCode
        Case $LVN_ENDLABELEDITA, $LVN_ENDLABELEDITW
            Local $tInfo = DllStructCreate($tagNMLVDISPINFO, $lParam)
            Local $tBuffer = DllStructCreate("char Text[" & DllStructGetData($tInfo, "TextMax") & "]", DllStructGetData($tInfo, "Text"))
            ConsoleWrite('Text: ' & DllStructGetData($tBuffer, "Text") & @CRLF)
            Return True
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc

Func Rename()
    $ListHandle = GUICtrlGetHandle($List1)
    $ListIdentificator = _GUICtrlListView_GetSelectedIndices($ListHandle, True)
    IF $ListIdentificator[0] = 0 Then Return
    _GUICtrlListView_EditLabel($ListHandle, $ListIdentificator[1])
EndFunc

Func quit()
    Exit
EndFunc
 

Andrey_A

Продвинутый
Сообщения
325
Репутация
68

gmtnzxer,​

возможно так:
Код:
$tBuffer = DllStructCreate("wchar Text[" & DllStructGetData($tInfo, "TextMax") & "]", DllStructGetData($tInfo, "Text"))
 
Верх