Что нового

Как добавить/удалить строку в GUICtrlCreateListView

Пётр325958

Новичок
Сообщения
14
Репутация
0
Добрый день форум!
Файл помощи AutoIt содержит в качестве примера по GUICtrlCreateListView/GUICtrlCreateListViewItem
следующий скрипт:
Код:
#include <GUIConstantsEx.au3>
#include <MsgBoxConstants.au3>
#include <WindowsConstants.au3>

Example()

Func Example()
    GUICreate("listview items", 220, 250, 100, 200, -1, $WS_EX_ACCEPTFILES)
    GUISetBkColor(0x00E0FFFF) ; will change background color

    Local $idListview = GUICtrlCreateListView("col1  |col2|col3  ", 10, 10, 200, 150) ;,$LVS_SORTDESCENDING)
    Local $idButton = GUICtrlCreateButton("Value?", 75, 170, 70, 20)
    Local $idItem1 = GUICtrlCreateListViewItem("item2|col22|col23", $idListview)
    Local $idItem2 = GUICtrlCreateListViewItem("item1|col12|col13", $idListview)
    Local $idItem3 = GUICtrlCreateListViewItem("item3|col32|col33", $idListview)
    GUICtrlCreateInput("", 20, 200, 150)
    GUICtrlSetState(-1, $GUI_DROPACCEPTED) ; to allow drag and dropping
    GUISetState(@SW_SHOW)
    GUICtrlSetData($idItem2, "ITEM1")
    GUICtrlSetData($idItem3, "||COL33")
    GUICtrlDelete($idItem1)

    ; Loop until the user exits.
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                ExitLoop

            Case $idButton
                MsgBox($MB_SYSTEMMODAL, "listview item", GUICtrlRead(GUICtrlRead($idListview)), 2)

            Case $idListview
                MsgBox($MB_SYSTEMMODAL, "listview", "clicked=" & GUICtrlGetState($idListview), 2)

        EndSwitch
    WEnd
EndFunc   ;==>Example


Скажите, пожалуйста, как добавить в этот лист/удалить из этого листа строку?
Это непонятно, так как эти строки оказываются заранее прописанными в теле самого скрипта.
Цель: получение вертикального ряда строк, из которых можно выбрать одну и чтобы
скрипт реагировал на этот выбор. Отличие от примера, приведённого выше: наличие
возможности изменить количество строк.
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Поиск по форуму и справка. Примеров масса
 
Автор
П

Пётр325958

Новичок
Сообщения
14
Репутация
0
Довёл скрипт до следующего состояния - добавление в ListView возможно:
Код:
#include <GUIConstantsEx.au3>
#include <MsgBoxConstants.au3>
#include <WindowsConstants.au3>

Example()

Func Example()
    GUICreate("listview items", 320,250, 500, 500, -1, $WS_EX_ACCEPTFILES)
    GUISetBkColor(0x00E0FFFF) ; will change background color

    $idListview = GUICtrlCreateListView("Nr.|Case|Description", 10, 10, 200, 150) ;,$LVS_SORTDESCENDING)

    $ButtonRun = GUICtrlCreateButton("Run", 220, 10, 70, 20)  
    $ButtonAdd = GUICtrlCreateButton("Add", 220, 30, 70, 20)
    $ButtonDelete = GUICtrlCreateButton("Delete", 220, 50, 70, 20)
        
    GUISetState(@SW_SHOW)
    
    Local $aItems[100]
    $Nr = 0
    
    ; Loop until the user exits.
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                ExitLoop
            Case $ButtonRun
                MsgBox($MB_SYSTEMMODAL,"",GUICtrlRead(GUICtrlRead($idListview)), 10)
            Case $ButtonAdd
                $Nr += 1
                $aItems[$Nr] = GUICtrlCreateListViewItem($Nr & "|Case|Description", $idListview)
            Case $ButtonDelete
                ?
        EndSwitch
    WEnd
EndFunc   ;==>Example

Но не понятно, как теперь удалить строку из построенного ListView -
- нужно, вероятно, удалить часть содержимого $idListview, но как это сделать?
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
Код:
;~ AutoIt Version: 3.3.14.5
#include <GUIConstantsEx.au3>
#include <GUIListView.au3>
#include <StaticConstants.au3>
#include <MsgBoxConstants.au3>
#include <WindowsConstants.au3>

Global $g_idListView, $g_hListView, $g_idLabel
_Example()

Func _Example()
	Local $hGUI = GUICreate("ListView - WM_NOTIFY", 400, 300)
	$g_idListView = GUICtrlCreateListView("Col 1|Col 2|Col 3", 10, 10, 380, 250, BitOR($GUI_SS_DEFAULT_LISTVIEW, $LVS_NOSORTHEADER))
	$g_hListView = GUICtrlGetHandle(-1)
	GUICtrlCreateListViewItem("Item 1-1|Item 1-2|Item 1-3", $g_idListView)
	GUICtrlCreateListViewItem("Item 2-1|Item 2-2|Item 2-3", $g_idListView)
	GUICtrlCreateListViewItem("Item 3-1|Item 3-2|Item 3-3", $g_idListView)
	$g_idLabel = GUICtrlCreateLabel("-", 10, 270, 380, 20, BitOR($SS_CENTER, $SS_CENTERIMAGE))
	GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
	GUISetState()
	MsgBox($MB_ICONINFORMATION, Default, "Двойной ЛКМ - добавить пункт" & @CRLF & _
			"Двойной ПКМ по первому столбцу - удалить пункт" & @CRLF & _
			"Двойной ПКМ по остальных столбцах - удалить значение", _
			0, $hGUI)

	While 1
		Switch GUIGetMsg()
			Case $GUI_EVENT_CLOSE
				Exit
		EndSwitch
	WEnd
EndFunc   ;==>_Example

Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
	Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $tInfo

	$tNMHDR = DllStructCreate($tagNMHDR, $lParam)
	$hWndFrom = DllStructGetData($tNMHDR, "hWndFrom")
	$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
	$iCode = DllStructGetData($tNMHDR, "Code")
	Switch $hWndFrom
		Case $g_hListView
			Switch $iCode
				Case $NM_CLICK
					Local $iIndex, $sData
					$tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam)
					$iIndex = DllStructGetData($tInfo, "Index")
					If $iIndex <> -1 Then
						$sData = _GUICtrlListView_GetItemTextString($g_hListView, $iIndex)
						GUICtrlSetData($g_idLabel, $sData)
					Else
						GUICtrlSetData($g_idLabel, "-")
					EndIf
				Case $NM_DBLCLK
					Local $iCount, $sData
					$tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam)
					$iCount = _GUICtrlListView_GetItemCount($g_hListView) + 1
					For $i = 1 To _GUICtrlListView_GetColumnCount($g_hListView)
						$sData &= "Item " & $iCount & "-" & $i & "|"
					Next
					$sData = StringTrimRight($sData, 1)
					GUICtrlCreateListViewItem($sData, $g_idListView)
				Case $NM_RDBLCLK
					Local $iIndex, $iSubItem
					$tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam)
					$iIndex = DllStructGetData($tInfo, "Index")
					$iSubItem = DllStructGetData($tInfo, "SubItem")
					If Not $iSubItem Then
						_GUICtrlListView_DeleteItem($g_hListView, $iIndex)
					Else
						_GUICtrlListView_SetItemText($g_hListView, $iIndex, "", $iSubItem)
					EndIf
			EndSwitch
	EndSwitch
	Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY


WM_NOTIFY
GUIListView
 
Верх