Всем доброго времени суток.
Необходима помощь в следующем.
Вставляю во второй столбец виртуального ListView изображение из ImageList. Все получается, но в первом столбце, перед текстом, появляется пустое место, как-будто там тоже вставлено изображение. Как можно этого избежать?
Необходима помощь в следующем.
Вставляю во второй столбец виртуального 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