Что нового

Работа с виртуальным ListView. Вставка иконок

pvnn

Осваивающий
Сообщения
305
Репутация
32
Всем доброго времени суток.
Необходима помощь в следующем.
Вставляю во второй столбец виртуального ListView изображение из ImageList. Все получается, но в первом столбце, перед текстом, появляется пустое место, как-будто там тоже вставлено изображение. Как можно этого избежать?

Код:
; Виртуальный ListView

#include <GUIConstants.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>
#include <Array.au3>
#include <ButtonConstants.au3>
#include <GuiListView.au3>
#include <GuiImageList.au3>

Global $hGui, $hEdit, $idEditSearch, $hLV, $iItems = 100000, $aItems[$iItems][3]



; Создать коллекцию изображений для отображения икинок в ListView
  $hImageLV = _GUIImageList_Create(16, 16, 5, 3)
  _GUIImageList_AddIcon($hImageLV, @SystemDir & "\hnetcfg.dll", 5)


  ; Create GUI
    $hGui = GUICreate( "Virtual ListView", 300, 230 )
  Local $Button1 = GUICtrlCreateButton("Button1", 10, 8, 75, 25)

  ; Create ListView
  Local $idLV = GUICtrlCreateListView( "", 10, 40, 300-20, 200-20, BitOR($LVS_OWNERDATA,$LVS_SHOWSELALWAYS) )
  _GUICtrlListView_SetExtendedListViewStyle($idLV, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES))
  $hLV = GUICtrlGetHandle( $idLV ) ;    Virtual listview Reduces flicker

; Создаем столбцы
  _GUICtrlListView_AddColumn( $hLV, "Items1",  100 )
  _GUICtrlListView_AddColumn( $hLV, "Items2",  100 )
  _GUICtrlListView_AddColumn( $hLV, "Items3",  100 )


; Создаем массив
  For $i = 0 To $iItems - 1
       $aItems[$i][0]='СтрокаI '&$i+1
       $aItems[$i][1]='СтрокаII '&$i+1
       $aItems[$i][2]='СтрокаIII '&$i+1
  Next


 GUICtrlSendMsg( $idLV, $LVM_SETITEMCOUNT, $iItems, 0 )
 GUIRegisterMsg( $WM_NOTIFY, "WM_NOTIFY" ) ; Заполнить структуру виртуального ListView
 _SendMessage($hLV, $LVM_SETIMAGELIST, $LVSIL_SMALL, $hImageLV, 0, "wparam", "hwnd", "hwnd") ; Для отображения иконок

GUISetState(@SW_SHOW)

  ; Message loop
  While 1
    Switch GUIGetMsg()
     Case $GUI_EVENT_CLOSE
        Exit
        Case $Button1
             $hLV = GUICtrlGetHandle( $idLV )
              $IndexListView=_GUICtrlListView_GetSelectedIndices($idLV) ; Индекс выделенной записи
              $Name=_GUICtrlListView_GetItemText($hLV,$IndexListView,0) ; Текст
             MsgBox(0,'',$Name)
    EndSwitch
  WEnd


Func WM_NOTIFY( $hWnd, $iMsg, $wParam, $lParam )
  Local Static $tText = DllStructCreate( "wchar[100]" )	; Размерность данных в столбцах
  Local Static $pText = DllStructGetPtr( $tText )		; Указатель структуры


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

  Switch $hWndFrom
    Case $hLV
      Switch $iCode

        ; Отобразить виртуальный ListView с иконкой
        Case $LVN_GETDISPINFOW
          Local $tNMLVDISPINFO = DllStructCreate( $tagNMLVDISPINFO, $lParam )
		; Бег по массиву
		$nRow = DllStructGetData($tNMLVDISPINFO, "item")	; Номер строки
		$nCol = DllStructGetData($tNMLVDISPINFO, "subitem")	; Номер столбца
		$sText = $aItems[$nRow][$nCol]			; Текст из Массива
		$nTextlen = StringLen($sText)			; Количество символов в строке
		; Заполняем структуру
		DllStructSetData( $tText, 1, $sText )						; Текст
		DllStructSetData($tNMLVDISPINFO, "text", $pText)			; Указатель структуры
		DllStructSetData($tNMLVDISPINFO, "textmax", $nTextlen)		; Длина строки
		; Отобразить иконку во 2-м столбце
		If $nCol=1 Then	DllStructSetData($tNMLVDISPINFO, "image",0)

      EndSwitch
 EndSwitch
  Return $GUI_RUNDEFMSG
EndFunc
 

vovsla

Осваивающий
Сообщения
607
Репутация
36
Дело не в иконках, если отключить их вставку, то 1 и 2 колонки не выравниваются по левому краю, а третья почему-то выравнивается в любом случае
 
Верх