В примере в 6-й строке иконки нет. Тем не менее, текст сдвинут вправо (как и во всех ячейках с иконками). Как добиться чтобы в 1-ом столбце текст без иконки не сдвигался вправо?
Код:
#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, "temp.bmp"); icon № 0
;_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)
LV_change2rows($hListView,1,0)
; 1 - столбец ListView
; 3 - столбец номер иконки в ImageList
; 0 - ячейка в ListView
EndSwitch
WEnd
EndFunc ;==>_Main
Func LV_change2rows($hListView,$nRow1,$nRow2) ;$nRow1,$nRow2 с нуля
Local $nCol,$row1text,$row2text
$nCol=_GUICtrlListView_GetColumnCount($hListView)
; текст
$row1text=_GUICtrlListView_GetItemTextString($hListView, $nRow1)
$row2text=_GUICtrlListView_GetItemTextString($hListView, $nRow2)
;картинки
global $row1img[$nCol]
global $row2img[$nCol]
for $i=1 to $nCol
$row1img[$i-1]=_GUICtrlListView_GetItemImage($hListView,$nRow1,$i-1)
$row2img[$i-1]=_GUICtrlListView_GetItemImage($hListView,$nRow2,$i-1)
Next
;очистка
_GUICtrlListView_DeleteItem($hListView,$nRow1)
_GUICtrlListView_InsertItem($hListView,"",$nRow1)
_GUICtrlListView_DeleteItem($hListView,$nRow2)
_GUICtrlListView_InsertItem($hListView,"",$nRow2)
;заполнение
for $i=1 to $nCol
if $row1img[$i-1]>-1 then _GUICtrlListView_SetItemImage($hListView,$nRow2,$row1img[$i-1],$i-1) ;если в ячейке есть картинка
if $row2img[$i-1]>-1 then _GUICtrlListView_SetItemImage($hListView,$nRow1,$row2img[$i-1],$i-1)
Next
_GUICtrlListView_SetItemText($hListView, $nRow2,$row1text,-1) ;заполнение строки
_GUICtrlListView_SetItemText($hListView, $nRow1,$row2text,-1) ;заполнение строки
EndFunc