Что нового

Отключение ImageList для ListView

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Создаю ImageList (_GUIImageList_Create), устанавливаю его с помощью _GUICtrlListView_SetImageList.
Далее требуется его отменить для ListView, но что то затрудняюсь найти решение :scratch:.

Пример для наглядности:
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GUIImageList.au3>
#include <GUIListView.au3>

$hImageList = _GUIImageList_Create(16, 16, 5)
_GUIImageList_AddIcon($hImageList, 'shell32.dll', 1)
_GUIImageList_AddIcon($hImageList, 'shell32.dll', 2)

$hGUI = GUICreate("Test Script", 300, 200)

$iLV = GUICtrlCreateListView("ListView Items", 20, 20, 260, 160)
_GUICtrlListView_SetImageList($iLV, $hImageList, 1)
_GUICtrlListView_InsertItem($iLV, 'Item 1', -1, 0)
_GUICtrlListView_InsertItem($iLV, 'Item 2', -1, 1)

GUISetState(@SW_SHOW, $hGUI)

Sleep(1000)

; Теперь я хочу удалить все записи и создать по новой,
; но уже без иконок
_GUICtrlListView_DeleteAllItems($iLV)
;_GUICtrlListView_UnSetImageList($iLV, $hImageList) ;???
_GUICtrlListView_InsertItem($iLV, 'Item 3')
_GUICtrlListView_InsertItem($iLV, 'Item 4')

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
CreatoR
Можно так:
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GUIImageList.au3>
#include <GUIListView.au3>

$hImageList = _GUIImageList_Create(16, 16, 5)
_GUIImageList_AddIcon($hImageList, 'shell32.dll', 1)
_GUIImageList_AddIcon($hImageList, 'shell32.dll', 2)

$hGUI = GUICreate("Test Script", 300, 200)

$iLV = GUICtrlCreateListView("ListView Items", 20, 20, 260, 160)
_GUICtrlListView_SetImageList($iLV, $hImageList, 1)
_GUICtrlListView_InsertItem($iLV, 'Item 1', -1, 0)
_GUICtrlListView_InsertItem($iLV, 'Item 2', -1, 1)

GUISetState(@SW_SHOW, $hGUI)

Sleep(1000)

; Теперь я хочу удалить все записи и создать по новой,
; но уже без иконок
_GUICtrlListView_DeleteAllItems($iLV)
_GUICtrlListView_SetImageList($iLV, 0, 1)
;_GUICtrlListView_UnSetImageList($iLV, $hImageList) ;???
_GUICtrlListView_InsertItem($iLV, 'Item 3')
_GUICtrlListView_InsertItem($iLV, 'Item 4')

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd


Код:
_GUICtrlListView_SetImageList($iLV, 0, 1)
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
firex [?]
Но это просто пустышки, а мне нужно полностью убрать, как будто бы ImageList и не задавался изначально.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Нашёл вот такое интересное решение:

Код:
...

_GUICtrlListView_UnSetImageList($iLV, $hImageList)

...

Func _GUICtrlListView_UnSetImageList($iLV, $hImageList)
	_GUIImageList_SetIconSize($hImageList, 0, 16)
	_GUICtrlListView_SetImageList($iLV, $hImageList, 1)
	_GUICtrlListView_SetImageList($iLV, 0)
EndFunc
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
CreatoR [?]
как будто бы ImageList и не задавался изначально
То отменить, то удалить...

Это вовсе не пустышки. Если требуется освобождение ресурсов ImageList'а и его удаление, то следом используйте:
Код:
_GUIImageList_Destroy


Upd/
Если вы имеете ввиду оставшийся отступ, то проблему решит перерисовка на своем обработчике.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
firex [?]
Если требуется освобождение ресурсов ImageList'а и его удаление, то следом используйте
Я так и делаю :smile:.

Проблема кажись решена :ok:.
 
Верх