Что нового

[Элементы GUI] Появление Кнопки при выборе GUICtrlCreateListViewItem

YOgen

Знающий
Сообщения
58
Репутация
5
Есть несколько GUICtrlCreateListViewItem, которые создаются в цикле

Код:
For $i = 1 To $Files[0]
GUICtrlCreateListViewItem ($File & '|' & '  ' & $Resolution, $ListView)
Next


Как можно сделать так, чтобы при выборе одного/нескольких элементов GUICtrlCreateListView загоралась (появлялась) кнопка (к примеру "Удалить") ?
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
YOgen [?]
Как можно сделать так, чтобы при выборе одного/нескольких элементов GUICtrlCreateListView загоралась (появлялась) кнопка (к примеру "Удалить") ?

Так:
Код:
#include <WindowsConstants.au3>
#include <GuiConstantsEx.au3>
#include <GuiListView.au3>

$Gui = GUICreate("Test", 200, 250)

$hListView = _GUICtrlListView_Create($GUI, "Items|SubItems", 5, 2, 190, 200, BitOR($LVS_EDITLABELS, $LVS_REPORT))
Dim $aData[4][2]=[["Борис", 44], ["Анна", 55], ["Света", 11], ["Миша",22]]

For $i=0 To 3
    $iItem = _GUICtrlListView_AddItem($hListView, "")
    For $j=0 To 1
         _GUICtrlListView_SetItemText($hListView, $iItem, $aData[$i][$j], $j)
    Next
Next

$Button=GUICtrlCreateButton('Delete',5, 220, 60, 20)
GUICtrlSetState(-1,$GUI_HIDE )

GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
GUISetState()

While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
       Exit
    Case $Button
		;........
	EndSwitch
WEnd
    
;==============================================
Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
;================================================================== 
    #forceref $hWnd, $iMsg, $iwParam
    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 $NM_CLICK
                    GUICtrlSetState($Button,$GUI_Show )
            EndSwitch
    EndSwitch 
    Return $GUI_RUNDEFMSG
EndFunc ; ===> WM_NOTIFY
 
Автор
YOgen

YOgen

Знающий
Сообщения
58
Репутация
5
gregaz,
в этом варианте кнопка появляется даже при нажатии вне элемента, т.е. где угодно в ListView нажимаешь и она появилась.
А хочется (ну прям очень-очень :laugh:smile: чтобы конкретно на элемент(ы) нажать и только тогда.
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
YOgen [?]
хочется (ну прям очень-очень
laugh.gif
) чтобы конкретно на элемент(ы) нажать и только тогда.
Так:
Код:
;.......
Case $NM_CLICK
Global $aHit = _GUICtrlListView_SubItemHitTest($hWndFrom)  
;MsgBox(0,'',$aHit[0])
If $aHit[0] <> -1 Then GUICtrlSetState($Button,$GUI_Show )
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
YOgen,
Или так?
Код:
;...
				Case $NM_CLICK
					$aSelected = _GUICtrlListView_GetSelectedIndices($hWndListView, True)
					If $aSelected[0] Then
						GUICtrlSetState($Button, $GUI_SHOW)
					Else
						GUICtrlSetState($Button, $GUI_HIDE)
					EndIf
				;...
 
Автор
YOgen

YOgen

Знающий
Сообщения
58
Репутация
5
И gregaz, и madmasles спасибо. Отлично!
 
Верх