damien2008
Осваивающий
- Сообщения
- 181
- Репутация
- 34
добрый день уважаемые форумчане.
прошу помочь с ListView.
нашел несколько примеров, двойной клик на ячейке и редактирование,
но вот второй и последующие столбцы не редактируются, да и новый текст в ячейке не сохраняется, может кто поможет.
P.S. я видел многие предлагают подменивать ячейку на поле ввода, но нормально подогнать его под ListView я так и не смог.
на зарубежном форуме есть пример RAGrid и _EIPListView, но там практически вся UDF это DllStruct и для меня пока что темный лес. :(
вот пример собрал из нескольких по-кусочку. help...
прошу помочь с 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