Что нового

[Элементы GUI] ListView изменить значение в ячейке

damien2008

Осваивающий
Сообщения
158
Репутация
30
добрый день уважаемые форумчане.
прошу помочь с ListView.
нашел несколько примеров, двойной клик на ячейке и редактирование,
но вот второй и последующие столбцы не редактируются, да и новый текст в ячейке не сохраняется, может кто поможет.
P.S. я видел многие предлагают подменивать ячейку на поле ввода, но нормально подогнать его под ListView я так и не смог.
на зарубежном форуме есть пример RAGrid и _EIPListView, но там практически вся UDF это DllStruct и для меня пока что темный лес. :(
вот пример собрал из нескольких по-кусочку. help...
Код:
#include<GuiListView.au3>
#include<GUIConstants.au3>
#include<Constants.au3>
#include<WindowsConstants.au3>


#include <GUIScrollBars.au3>
#include <ScrollBarConstants.au3>
Global $iDouble_Click_Event = False

$Gui = GUICreate('ListViewTestEdit', 400, 250)
$hListView = GUICtrlCreateListView("", 2, 2, 390, 196, BitOR($LVS_EDITLABELS, $LVS_REPORT))

If Not IsHWnd($hListView) Then $hListView = GUICtrlGetHandle($hListView)

_GUICtrlListView_InsertColumn($hListView, 0, "Колонка 1", 120)
_GUICtrlListView_InsertColumn($hListView, 1, "Колонка 2", 120)
_GUICtrlListView_InsertColumn($hListView, 2, "Колонка 3", 120)

_GUICtrlListView_AddItem($hListView, "Стр 1: Кол 1", 0)
_GUICtrlListView_AddSubItem($hListView, 0, "Стр 1: Кол 2", 1, 1)
_GUICtrlListView_AddSubItem($hListView, 0, "Стр 1: Кол 3", 2, 2)
_GUICtrlListView_AddItem($hListView, "Стр 2: Кол 1", 1)
_GUICtrlListView_AddSubItem($hListView, 1, "Стр 2: Кол 2", 1, 2)
_GUICtrlListView_AddItem($hListView, "Стр 3: Кол 1", 2)

_GUICtrlListView_SetColumnWidth($hListView, 0, 100)
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
GUISetState()


While 1
    $msg = GUIGetMsg()
    Switch $msg
        Case $GUI_EVENT_CLOSE
            ExitLoop
	EndSwitch

	If $iDouble_Click_Event Then
        $iDouble_Click_Event = 0
        $iSelected = _GUICtrlListView_GetSelectedIndices($hListView)
		If $iSelected <> '' Then _GUICtrlListView_EditLabel($hListView, $iSelected)
    EndIf
WEnd

Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView
    $hWndListView = $hListView
    If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)

    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
	$iCode = DllStructGetData($tNMHDR, "Code")

    Switch $hWndFrom
        Case $hWndListView
            Switch $iCode
                Case $LVN_BEGINLABELEDITA;, $LVN_BEGINLABELEDITW
                    Local $tInfo = DllStructCreate($tagNMLVDISPINFO, $ilParam)
                    Return False
                Case $LVN_ENDLABELEDITA;, $LVN_ENDLABELEDITW
                    Local $tInfo = DllStructCreate($tagNMLVDISPINFO, $ilParam)
                    Local $tBuffer = DllStructCreate("char Text[" & DllStructGetData($tInfo, "TextMax") & "]", _
                        DllStructGetData($tInfo, "Text"))
                    Local $sNewText = DllStructGetData($tBuffer, "Text")
                    If StringLen($sNewText) Then Return True
				Case $NM_DBLCLK
                    $iDouble_Click_Event = True
				Case $NM_CLICK, $NM_rCLICK
					Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
					Local $iIndex = DllStructGetData($tInfo, "Index")
					Local $iSubItem = DllStructGetData($tInfo, "SubItem")
					Local $sTextItem = _GUICtrlListView_GetItemText($hListView, $iIndex, $iSubItem)
					$iLastItemIndex = $iIndex
					$iLastSubItemIndex = $iSubItem
					_GUICtrlListView_SetSelectedColumn($hListView, $iLastSubItemIndex)
					$hActive = $hListView
					ControlFocus($GUI, "", $hListView)
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
361
damien2008
В этой теме может что полезное найдется:
http://autoit-script.ru/index.php?topic=11394
 
Верх