Что нового

Как разместить изображение из ImageList в центре колонки ListView

pvnn

Осваивающий
Сообщения
305
Репутация
32
Добрый день
Как разместить изображение из ImageList в центре колонки ListView. В частности, в третьей колонке, нужно установить изображение (квадрат) по центру.
_GUICtrlListView_SetItem работает только с первой колонкой


Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>
#include <GuiImageList.au3>



$Form1 = GUICreate("ListView с несколькими колонками CheckBox", 482, 407, -1, -1)

$hListView =  GUICtrlCreateListView ("Поле1|Поле2|Поле3",  8, 8, 457, 329,BitOR($LVS_REPORT,$LVS_SHOWSELALWAYS))
_GUICtrlListView_SetExtendedListViewStyle($hListView, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES))

; Создать ImageList
$hImage = _GUIImageList_Create(16, 16, 5, 3)
_GUIImageList_AddIcon($hImage, @SystemDir & "\hnetcfg.dll", 2) ; UnCheck
_GUIImageList_AddIcon($hImage, @SystemDir & "\hnetcfg.dll", 1) ; Check
_GUICtrlListView_SetImageList($hListView, $hImage, 1)

For $i = 0 To 5
    _GUICtrlListView_AddItem($hListView, "Test", 0)
    _GUICtrlListView_AddSubItem($hListView, $i, "Test2",1)
    _GUICtrlListView_AddSubItem($hListView, $i, "",2,0)
Next
_GUICtrlListView_SetColumnWidth($hListView,0,100)
_GUICtrlListView_SetColumnWidth($hListView,1,$LVSCW_AUTOSIZE_USEHEADER)
_GUICtrlListView_SetColumnWidth($hListView,2,100)


; Отступ
_GUICtrlListView_SetItem($hListView,'',0,0,0,-1,2)  ; Работает только с 1 столбцом
_GUICtrlListView_SetItem($hListView,'',0,2,0,-1,2)  ; Не работает



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

While 1

    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd


Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    Local $hWndFrom,  $iCode, $tNMHDR, $hWndListView, $tInfo

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

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

    $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
    $iIndex = DllStructGetData($tInfo, "Index")

    Switch $hWndFrom
        Case $hWndListView
            Switch $iCode

                Case $NM_CLICK
                    $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
                    $itemindex = DllStructGetData($tInfo, "Index")
                    $subitemindex = DllStructGetData($tInfo, "SubItem")
                    $currentitemimage = _GUICtrlListView_GetItemImage($hWndListView, $itemindex, $subitemindex)
                    ConsoleWrite(@SystemDir)
                        If $currentitemimage = 0 Then
                            _GUICtrlListView_SetItemImage($hWndListView, $itemindex, 1, $subitemindex)
                        ElseIf $currentitemimage = 1 Then
                            _GUICtrlListView_SetItemImage($hWndListView, $itemindex, 0, $subitemindex)
                        EndIf


            EndSwitch
    EndSwitch

    Return $GUI_RUNDEFMSG
EndFunc
 
A

Alofa

Гость
Код:
; Вы используете
_GUICtrlListView_SetItem()
; В справке рядышком имеется похожая функция:
_GUICtrlListView_SetItemEx()
; ... посмотрите, что там написано про подпункты
 
Автор
P

pvnn

Осваивающий
Сообщения
305
Репутация
32
Написано:
Вы не можете установить элементы "State" или "Param" для подпункта потому что подпункты не имеют этих атрибутов.

Alofa, может быть есть какой-нибудь альтернативный способ?
 
Верх