Что нового

[Элементы GUI] Редактирование ListView subitem

Dimmak

Знающий
Сообщения
185
Репутация
9
Help, please! :IL_AutoIt_1: :smile: ;) 8) :whistle: :ok: :beer: :IL_AutoIt_1:
В данном скрипте при помощи F2 редактируется выбранный элемент колонки 'Name'.
Что нужно изменить в коде, чтоб редактировать элементы колонки 'Pid'? :scratch:

Код:
#include <GUIConstantsEx.au3>
;#Include <CoProc.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>
#Include <WinAPIex.au3>
#include <Constants.au3>
;#include <Process.au3>
#include <Misc.au3>
;	#Include <HotKey.au3>
;	#Include <vkConstants.au3>
;#Include <_my.au3>
							#include-once
							#NoTrayIcon

#include <EditConstants.au3>
#include <GuiButton.au3>


_singleton(@ScriptName)


Global $hListView
Global $Gui
Global $hEdit

Dim $arr[4]
$arr[1] = 'val_1'
$arr[2] = 'val_2'
$arr[3] = 'val_3'

$Gui = GUICreate("Prs_Mngr",225 ,260 ,-1,-1)
$ListView = GUICtrlCreateListView("Name|PiD",5,5,215,215,$LVS_EDITLABELS)
$hListView = GUICtrlGetHandle($ListView)

_GUICtrlListView_SetColumnWidth($ListView , 0, 150)
_GUICtrlListView_SetColumnWidth($ListView , 1, 60)

For $i = 1 to 3
	_GUICtrlListView_AddItem($ListView, $arr[$i] , $i,_GUICtrlListView_GetItemCount($ListView) + 9999)
	_GUICtrlListView_AddSubItem($ListView, $i-1, $i, 1)
Next

WinMove($Gui, "", 1050, 685)
GUISetState(@SW_SHOW, $Gui)



GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
;#Include 'WM_NOTIFY.au3'

While 1

$msg = GUIGetMsg()

	Switch $msg
		Case $GUI_EVENT_CLOSE
			GUIDelete($Gui)
Exit
	EndSwitch

WEnd

;====================================================================================
;====================================================================================
Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
    #forceref $hWnd, $iMsg, $wParam

    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $tInfo

    $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
        Case $hListView
            Switch $iCode
                Case $LVN_COLUMNCLICK
         _GUICtrlListView_SortItems($ListView, GUICtrlGetState($ListView))

                Case $NM_DBLCLK ; левый двойной клик мышкой по пункту

				Case $NM_CLICK ; левый клик мышкой по пункту

                Case $LVN_KEYDOWN ; нажатие любой клавиши
                    Local $tInfo = DllStructCreate($tagNMLVKEYDOWN, $lParam)
                    Local $Key = DllStructGetData($tInfo, "VKey")
                    Switch DllStructGetData($tInfo, "VKey")
 ;==>  F2
					Case 113
						$Tmp = _GUICtrlListView_GetSelectedIndices($hListView, True)

							If $Tmp[0]>0 Then
                                _GUICtrlListView_EditLabel( $hListView, $Tmp[1] )
                                Return False
                            EndIf
                    EndSwitch
 ;==>  F2
                Case $LVN_ENDLABELEDITA, $LVN_ENDLABELEDITW ; конец редактирования пункта
                    ;$tInfo = DllStructCreate($tagNMLVDISPINFO, $lParam)
                    Local $tBuffer = DllStructCreate("char Text[" & DllStructGetData($tInfo, "TextMax") & "]", DllStructGetData($tInfo, "Text"))
                    If StringLen(DllStructGetData($tBuffer, "Text")) Then Return True

                Case $NM_RCLICK ; правый клик мышкой по пункту

                Case $NM_RDBLCLK ; правый двойной клик мышкой по пункту

            EndSwitch
        Case Else
            ; Обработка события кнопок
            Local Const $BCN_HOTITEMCHANGE = -1249
            Local $tNMBHOTITEM = DllStructCreate("hwnd hWndFrom;int IDFrom;int Code;dword dwFlags", $lParam)
            Local $nNotifyCode = DllStructGetData($tNMBHOTITEM, "Code"), _
                    $nID = DllStructGetData($tNMBHOTITEM, "IDFrom"), _
                    $hCtrl = DllStructGetData($tNMBHOTITEM, "hWndFrom"), _
                    $dwFlags = DllStructGetData($tNMBHOTITEM, "dwFlags"), _
                    $sText = ""

            Switch $nNotifyCode
                Case $BCN_HOTITEMCHANGE ; Win XP и выше
                    If BitAND($dwFlags, 0x10) = 0x10 Then
                        $sText = "наведена"
                    ElseIf BitAND($dwFlags, 0x20) = 0x20 Then
                        $sText = "оставлена"
                    EndIf


            EndSwitch
    EndSwitch

    Return $GUI_RUNDEFMSG
EndFunc
;====================================================================================
;====================================================================================

While 1
	sleep(100)
WEnd
 

AZJIO

Меценат
Меценат
Сообщения
2,878
Репутация
1,194
Dimmak
Посмотри эту функцию, вставь в неё обработку по F2, а для определения пункта над которым находится курсор можно использовать _GUICtrlListView_SubItemHitTest.
 
Верх