Что нового

Как вставить/поменять иконку в ListView?

Dream-52

...
Сообщения
82
Репутация
1
Вот есть код.не знаю,может я не понимаю чтото,но справку смотрел - но никак не могу понять,как можно "ставить" иконки? Я даже думал,что тут list view перевернут набок.. :whistle:

Код:
#include <GuiConstantsEx.au3>
#include <GuiListView.au3>
#include <GuiImageList.au3>
#include <WindowsConstants.au3>

Opt('MustDeclareVars', 1)

_Main()

Func _Main()
    Local $listview, $hImage
    Local $exStyles = BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES)

    GUICreate("ImageList AddIcon", 400, 300)
    $listview = GUICtrlCreateListView("", 2, 2, 394, 268, BitOR($LVS_SHOWSELALWAYS, $LVS_NOSORTHEADER, $LVS_REPORT))
    _GUICtrlListView_SetExtendedListViewStyle($listview, $exStyles)
    GUISetState()

    ; Load images
    $hImage = _GUIImageList_Create(16, 16, 5, 3)
    _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", 110)
    _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", 131)
    _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", 165)
    _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", 168)
    _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", 137)
    _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", 146)
    _GUICtrlListView_SetImageList($listview, $hImage, 1)

    ; Add columns
    _GUICtrlListView_AddColumn($listview, "Column 1", 120)
    _GUICtrlListView_AddColumn($listview, "Column 2", 100)
    _GUICtrlListView_AddColumn($listview, "Column 3", 100)

    ; Add items
    _GUICtrlListView_AddItem($listview, "Row 1: Col 1", 0)
    _GUICtrlListView_AddSubItem($listview, 0, "Row 1: Col 2", 1, 1)
    _GUICtrlListView_AddSubItem($listview, 0, "Row 1: Col 3", 2, 2)
    _GUICtrlListView_AddItem($listview, "Row 2: Col 1", 1)
    _GUICtrlListView_AddSubItem($listview, 1, "Row 2: Col 2", 1, 2)

    _GUICtrlListView_SetItemImage($listview, 0, 1, 2)
    _GUICtrlListView_SetItemImage($listview, 0, 2, 2)
    _GUICtrlListView_SetItemImage($listview, 0, 3, 2)
    _GUICtrlListView_SetItemImage($listview, 0, 4, 2)
    ; Loop until user exits
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    GUIDelete()
EndFunc   ;==>_Main
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
Re: Как вставить/поменять иконку ? (_GUICtrlListView_Create)

Изображения (иконки) в ListView связаны со списком изображений (ImageList), т.е. каждый элемент ListView ссылается на определенную иконку в ImageList с указанным индексом. Для того, чтобы поменять иконку у элемента ListView, достаточно изменить изображение в ImageList с индексом, с которым связан этот элемент.

P.S

ImageList, это всего-навсего очень длинный битмап.

:smile:
 
Автор
D

Dream-52

...
Сообщения
82
Репутация
1
Re: Как вставить/поменять иконку ? (_GUICtrlListView_Create)

Yashied сказал(а):
Изображения (иконки) в ListView связаны со списком изображений (ImageList), т.е. каждый элемент ListView ссылается на определенную иконку в ImageList с указанным индексом. Для того, чтобы поменять иконку у элемента ListView, достаточно изменить изображение в ImageList с индексом, с которым связан этот элемент.

P.S

ImageList, это всего-навсего очень длинный битмап.

:smile:
Можно простой пример ? Просто чтото не получается.Вернее получается - но както криво,иконки меняются в самой строке (по столбикам)
 

`p r o x y

«Улыбайтесь, господа!»
Команда форума
Глобальный модератор
Сообщения
596
Репутация
157
Re: Как вставить/поменять иконку ? (_GUICtrlListView_Create)

Tommy Dreams [?]
Можно простой пример ?
А какой пример вы ожидаете, если в самом вопросе уже привели пример создания иконок?

Элементу ListView необходимо установить стиль $LVS_EX_SUBITEMIMAGES для отображения иконок.
Далее необходимо добавить иконки. В примере это столбик под комментарием "Load images".
 
Автор
D

Dream-52

...
Сообщения
82
Репутация
1
Не могу понять просто как поменять именно для конкретного item (строки) иконку :blink: чтото не врубю :wacko:
 
Автор
D

Dream-52

...
Сообщения
82
Репутация
1
Почти разобрался,но еле-еле (наверно туп :shok:).
 

`p r o x y

«Улыбайтесь, господа!»
Команда форума
Глобальный модератор
Сообщения
596
Репутация
157
Код:
#AutoIt3Wrapper_au3check_parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
#include <GuiConstantsEx.au3>
#include <GuiListView.au3>
#include <GuiImageList.au3>
#include <WindowsConstants.au3>

Opt('MustDeclareVars', 1)

_Main()

Func _Main()
    Local $hListView, $hImage, $hChangeIcon
    Local $exStyles = BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES)

    GUICreate("ImageList AddIcon", 400, 300)

	$hListView = GUICtrlCreateListView("", 2, 2, 394, 268, BitOR($LVS_SHOWSELALWAYS, $LVS_NOSORTHEADER, $LVS_REPORT))
		_GUICtrlListView_SetExtendedListViewStyle($hListView, $exStyles)

	$hChangeIcon = GUICtrlCreateButton('Change icon', 325, 272)

	GUISetState()

    ; Load images
    $hImage = _GUIImageList_Create(16, 16, 5, 3)
    _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", 110); icon № 0 - папка
    _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", 131); icon № 1 - удалить
    _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", 165); icon № 2 - готово
    _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", 168); icon № 3 - музыка
    _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", 137); icon № 4 - воспроизвести
    _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", 146); icon № 5 - вверх
    _GUICtrlListView_SetImageList($hListView, $hImage, 1)

    ; Add columns
    _GUICtrlListView_AddColumn($hListView, "Column 1", 120)
    _GUICtrlListView_AddColumn($hListView, "Column 2", 100)
    _GUICtrlListView_AddColumn($hListView, "Column 3", 100)

    ; Add items
    _GUICtrlListView_AddItem($hListView, "Row 1: Col 1", 0)
    _GUICtrlListView_AddSubItem($hListView, 0, "Row 1: Col 2", 1, 1)
    _GUICtrlListView_AddSubItem($hListView, 0, "Row 1: Col 3", 2, 2)
    _GUICtrlListView_AddItem($hListView, "Row 2: Col 1", 1)
    _GUICtrlListView_AddSubItem($hListView, 1, "Row 2: Col 2", 1, 2)
    _GUICtrlListView_AddItem($hListView, "Row 3: Col 1", 2)
    _GUICtrlListView_AddItem($hListView, "Row 4: Col 1", 3)
    _GUICtrlListView_AddItem($hListView, "Row 5: Col 1", 4)
    _GUICtrlListView_AddSubItem($hListView, 4, "Row 5: Col 2", 1, 3)
    _GUICtrlListView_AddItem($hListView, "Row 6: Col 1", 5)
    _GUICtrlListView_AddSubItem($hListView, 5, "Row 6: Col 2", 1, 4)
    _GUICtrlListView_AddSubItem($hListView, 5, "Row 6: Col 3", 2, 3)

    ; Loop until user exits
	While 1
		Switch GUIGetMsg()
			Case $GUI_EVENT_CLOSE
				Exit

			; Change icon: изменить в 1ом столбце во 2ой ячейке иконку с "удалить" на "музыка"
			Case $hChangeIcon
				_GUICtrlListView_SetItemImage($hListView, 1, 3, 0)
				; 1 - столбец ListView
				; 3 - столбец номер иконки в ImageList
				; 0 - ячейка в ListView

		EndSwitch
	WEnd
EndFunc   ;==>_Main



ImageList – это список изображений/иконок, которые можно назначить разным элементам GUI.

Код:
_GUIImageList_Create

Создание ImageList.

Код:
_GUIImageList_AddIcon

Добавление иконок в ImageList.

Код:
_GUICtrlListView_SetImageList

Назначение ImageList определенному ListView.

Код:
_GUICtrlListView_AddSubItem($hListView, 1, "Row 2: Col 2", 1, 2)

Создание ячейки ListView. Самый последний параметр «2» - назначение изображения/иконки из ImageList создаваемой ячейке.
 
Верх