Что нового

Как правильно НЕ присвоить иконку ячейке 1-го столбца ListView?

Pahuchiy

Новичок
Сообщения
37
Репутация
0
В примере в 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
 
Верх