Что нового

Иконки в ListView

Nefakt

Новичок
Сообщения
74
Репутация
3
Всем привет.
Такой вопрос, пробовал применить к ListView Расширенный стиль $LVS_EX_SNAPTOGRID При отображении в виде иконок, иконки автоматически располагаются по сетке. Но в ListView иконки как были списком так и остались. Как можно сделать что бы в ListView отображались только иконки без надписей? Заранее спасибо.
Вот какие расширения стоят на ListView
Код:
$ListView1 = GUICtrlCreateListView("", 1, 32, 485, 364, BitOR($LVS_SINGLESEL, $LVS_ICON), BitOR($LVS_EX_FLATSB, $LVS_EX_DOUBLEBUFFER, $LVS_EX_SNAPTOGRID))
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Код:
#include <GUIConstantsEx.au3>
#include <GUIListView.au3>

$hGUI = GUICreate("")

$ListView1 = GUICtrlCreateListView("Col", 1, 32, 485, 364)
GUICtrlSetStyle($ListView1, BitOR($LVS_SINGLESEL, $LVS_ICON), BitOR($LVS_EX_FLATSB, $LVS_EX_DOUBLEBUFFER, $LVS_EX_SNAPTOGRID))

GUICtrlCreateListViewItem('item 1', $ListView1)
GUICtrlSetImage(-1, 'shell32.dll', -2)

GUICtrlCreateListViewItem('item 2', $ListView1)
GUICtrlSetImage(-1, 'shell32.dll', -3)

GUISetState(@SW_SHOW, $hGUI)

While 1
	$nMsg = GUIGetMsg()

	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd
 
Автор
Nefakt

Nefakt

Новичок
Сообщения
74
Репутация
3
CreatoR
Спасибо так работает. Но в моем коде картинок нету только название появляется.
Вот код как ListView заполняется у меня.
Код:
$hImage = _GUIImageList_Create(32, 32)
If @error Then
    MsgBox(4096, "", "Произошла ошибка, возможно отсутствует INI-файл.")
Else
    For $i = 1 To $var[0][0]
		_GUICtrlListView_AddItem($ListView1, $var[$i][0], _GUIImageList_AddIcon($hImage, @ScriptDir & "\Resource\" & $var[$i][0] & ".ico", '', True))
    Next
	_GUICtrlListView_SetImageList($ListView1, $hImage, 1)
EndIf

И если добавить это
Код:
GUICtrlSetStyle($ListView1, BitOR($LVS_SINGLESEL, $LVS_ICON), BitOR($LVS_EX_FLATSB, $LVS_EX_DOUBLEBUFFER, $LVS_EX_SNAPTOGRID))

То Становится сеткой но без картинок а только надписи.
Вот как получается
20fd9d4df792.png
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Nefakt [?]
Но в моем коде картинок нету только название появляется.
Покажите весь код создания ListView и прикрепите картинки.
 
Автор
Nefakt

Nefakt

Новичок
Сообщения
74
Репутация
3
Вот Код
Код:
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>
#include <GuiImageList.au3>
#Include <WinAPIEx.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Библиотека Игр", 487, 397, 319, 133, BitOR($WS_MINIMIZEBOX, $WS_POPUP, $WS_GROUP), $WS_EX_TOOLWINDOW);288, 225, 192, 124
GUISetBkColor(0x282828)
;~ GUIRegisterMsg($WM_NCHITTEST, 'WM_NCHITTEST')
$ListView1 = GUICtrlCreateListView("", 1, 32, 485, 364)
GUICtrlSetStyle($ListView1, BitOR($LVS_SINGLESEL, $LVS_ICON), BitOR($LVS_EX_FLATSB, $LVS_EX_DOUBLEBUFFER, $LVS_EX_SNAPTOGRID))
$ListView1context = GUICtrlCreateContextMenu($ListView1)
$Add = GUICtrlCreateMenuItem("Добавить", $ListView1context)
$Delete = GUICtrlCreateMenuItem("Удалить", $ListView1context)
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

$Settings = GUICtrlCreateButton("Н", 214, -4, 24, 24)
GUICtrlSetBkColor(-1, 0x333333)
GUICtrlSetColor(-1, 0x008080)
$Exit = GUICtrlCreateButton("X", 262, -4, 24, 24)
GUICtrlSetBkColor(-1, 0x333333)
GUICtrlSetColor(-1, 0x008080)
$Minimize = GUICtrlCreateButton("_", 238, -4, 24, 24)
GUICtrlSetBkColor(-1, 0x333333)
GUICtrlSetColor(-1, 0x008080)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

Global $sIni_File = @ScriptDir & '\Settings.ini' ;Хранение файла
Global $var = IniReadSection($sIni_File, 'Game'), $iDouble_Click_Event = False
icon()
Func icon()
For $q = 1 To $var[0][0]
Local $aIcon[2], $sIcon = $var[$q][1], $aRes, $iCount
If Not FileExists($sIcon) Then Exit 13
$aRes = DllCall('shell32.dll', 'uint', 'ExtractIconExW', 'wstr', $sIcon, 'int', -1, 'ptr', 0, 'ptr', 0, 'uint', 1)
If (@error) Or (Not $aRes[0]) Then Exit 13
$iCount = $aRes[0]
For $i = 0 To $iCount - 1
    For $j = 0 To 1
        $aIcon[$j] = _WinAPI_ExtractIcon($sIcon, $i, $j)
        If @error Then ExitLoop
    Next
    If Not @error Then _WinAPI_SaveHICONToFile(@ScriptDir & '\Resource\' & $var[$q][0] & '.ico', $aIcon)
    For $j = 0 To 1
        If $aIcon[$j] Then _WinAPI_DestroyIcon($aIcon[$j])
    Next
Next
Next
Start()
EndFunc

Func Start();Загрузка файла
$hImage = _GUIImageList_Create(32, 32)
If @error Then
    MsgBox(4096, "", "Произошла ошибка, возможно отсутствует INI-файл.")
Else
    For $i = 1 To $var[0][0]
		_GUICtrlListView_AddItem($ListView1, $var[$i][0], _GUIImageList_AddIcon($hImage, @ScriptDir & "\Resource\" & $var[$i][0] & ".ico", '', True))
    Next
	_GUICtrlListView_SetImageList($ListView1, $hImage, 1)
EndIf
EndFunc   ;==>Start



While 1
	$q = Number(_GUICtrlListView_GetSelectedIndices($ListView1))
	$file = _GUICtrlListView_GetItemText($ListView1, $q, 0)



		$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $Exit
			Exit

	EndSwitch

	If $iDouble_Click_Event Then
	$iDouble_Click_Event = 0
	$textgame = IniRead ($sIni_File, "Game", $file, "" )
	$sRes = StringLeft($textgame, StringInStr($textgame, "\", 2, -1)-1)
	TrayTip("Игры", "Запуск игры " & $file, 5, 1)
	Sleep(3000)
	ShellExecute($textgame, "", $sRes); запускаем
	EndIf
WEnd


Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
	Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView = $ListView1
	If Not IsHWnd($ListView1) Then $hWndListView = GUICtrlGetHandle($ListView1)

	$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
	$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
	$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
	$iCode = DllStructGetData($tNMHDR, "Code")

	Switch $hWndFrom
		Case $hWndListView
			Switch $iCode
				Case $NM_CLICK
					$iOne_Click_Event = True
				Case $NM_DBLCLK
					$iDouble_Click_Event = True
			EndSwitch
	EndSwitch

	Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY


Вот иконки https://yadi.sk/d/rSJkpVTOefhuY

Вот вид ini файла
Код:
[Game]
Child of Light=C:\Games\Child of Light\ChildofLight.exe
Dying Light=C:\Games\Dying Light\DyingLightGame.exe
Farming Simulator 15=C:\Games\Farming Simulator 15\FarmingSimulator2015.exe
Knock-knock=C:\Games\Knock-knock\knock.exe
Win32=C:\Games\Life Is Strange\Binaries\Win32\LifeIsStrange.exe
Need for Speed Shift=C:\Games\Need for Speed Shift\SHIFT.exe
Rayman Legends=C:\Games\Rayman Legends\Rayman Legends.exe
Bin=C:\Games\The Sims 4\Game\Bin\TS4.exe
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Код:
Func Start();Загрузка файла
$hImage = _GUIImageList_Create(32, 32)
If @error Then
    MsgBox(4096, "", "Произошла ошибка, возможно отсутствует INI-файл.")
Else
    _GUICtrlListView_SetImageList($ListView1, $hImage, 1)
    For $i = 1 To $var[0][0]
        _GUICtrlListView_AddItem($ListView1, $var[$i][0], _GUIImageList_AddIcon($hImage, @ScriptDir & "\Resource\" & $var[$i][0] & ".ico", '', True))
    Next
EndIf
EndFunc
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Nefakt
У меня так все работает.
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>
#include <GuiImageList.au3>
#include <File.au3>

Global $hGui, $iLV, $aIco, $hImage

$hGui = GUICreate('Библиотека Игр', 487, 397, 319, 133, BitOR($WS_MINIMIZEBOX, $WS_POPUP, $WS_GROUP), $WS_EX_TOOLWINDOW)
GUISetBkColor(0x282828)
$iLV = GUICtrlCreateListView("", 1, 32, 485, 364)
GUICtrlSetStyle($iLV, BitOR($LVS_SINGLESEL, $LVS_ICON), BitOR($LVS_EX_FLATSB, $LVS_EX_DOUBLEBUFFER, $LVS_EX_SNAPTOGRID))
$aIco = _FileListToArray(@ScriptDir & '\Resource', '*.ico', 1)
If @error Then Exit 13
$hImage = _GUIImageList_Create(32, 32, 5)
For $i = 1 To $aIco[0]
	_GUIImageList_AddIcon($hImage, @ScriptDir & '\Resource\' & $aIco[$i], 0, True)
	_GUICtrlListView_AddItem($iLV, $aIco[$i], $i - 1)
Next
$aIco = 0
_GUICtrlListView_SetImageList($iLV, $hImage)
GUISetState()

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd
 
Автор
Nefakt

Nefakt

Новичок
Сообщения
74
Репутация
3
CreatoR
Спасибо но с этим кодом все равно почему то не грузит иконки. Странно...
madmasles
Твой код работает отлично.

Спасибо вам за помощь.
 
Автор
Nefakt

Nefakt

Новичок
Сообщения
74
Репутация
3
CreatoR
Не знаю тогда, я его подключил и получилось точно так же как на скрине который я выложил выше.
Все равно спасибо за помощь.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Nefakt [?]
я его подключил
Код:
_GUICtrlListView_SetImageList($ListView1, $hImage)

а если без третьего параметра?
Я изначально такой вариант выложил, потом изменил.
 
Автор
Nefakt

Nefakt

Новичок
Сообщения
74
Репутация
3
CreatoR
Так я пробовал еще до того как тут написал тоже не получилось.


Добавлено:
Сообщение автоматически объединено:

А еще не большой такой вопрос. Если что могу новую тему создать.
Мне нужно сравнить две строки
Например первая строка
Dying Light
Вторая
DyingLightGame.exe
Нужно их сравнить по первым трем буквам если они совпадают то добавляет в ListVIew если нет пропускает
Пробовал с помощью StringInStr но он пропускает. Проблема в том что первые с пробелами могут быть.
Код:
If StringInStr ( StringRegExpReplace($sRoot,  '^(?:.*\\)([^\\]*?)(?:\.[^.]+)?$', "\1"), $FileList[$i], 0, 1, 1, 3) Then
MsgBox(4096,"","Строки совпадают")
Else
MsgBox(4096,"","Строки НЕ совпадают")
EndIf
 
Верх