Что нового

Checkbox и список файлов из _FileListToArray в ListView

D3fault_Player

Новичок
Сообщения
8
Репутация
0
Вот проблема в этом что у меня никак не выходит запихнуть список файлов из _FileListToArray и перед ним создать колонку с checkbox'ами так чтобы 1 checkbox на 1 файл. Как это можно реализовать?
вот скрин как примерно дожно выйти(но у меня не выходит)
 

madmasles

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

Dim $aDir[3] = [@SystemDir, @WindowsDir, @MyDocumentsDir]
$iInd = 0

$hGui = GUICreate('Test My', 400, 320)
$nListView = GUICtrlCreateListView('', 2, 2, 394, 268, $GUI_SS_DEFAULT_LISTVIEW, _
		BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_CHECKBOXES, $LVS_EX_GRIDLINES))
$hListView = GUICtrlGetHandle($nListView)
_GUICtrlListView_AddColumn($nListView, 'Файл', 200)
_GUICtrlListView_AddColumn($nListView, 'Размер', 100, 2)
$nButton = GUICtrlCreateButton('Go', 50, 280, 100, 30)
GUISetState()

_WinAPI_EmptyWorkingSet()
While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
		Case $nButton
			Local $aFiles = _FileListToArray($aDir[$iInd], '*', 1)
			If @error Then ContinueLoop
			Dim $aItems[$aFiles[0]][2]
			For $i = 1 To $aFiles[0]
				$aItems[$i - 1][0] = $aFiles[$i]
				$aItems[$i - 1][1] = _WinAPI_StrFormatByteSize(FileGetSize($aDir[$iInd] & '\' & $aFiles[$i]))
			Next
			$aFiles = 0
			_GUICtrlListView_DeleteAllItems($hListView)
			_GUICtrlListView_BeginUpdate($hListView)
			_GUICtrlListView_AddArray($nListView, $aItems)
			_GUICtrlListView_EndUpdate($hListView)
			WinSetTitle($hGui, '', $aDir[$iInd])
			$aItems = 0
			$iInd += 1
			If $iInd = 3 Then $iInd = 0
	EndSwitch
WEnd
 
Автор
D

D3fault_Player

Новичок
Сообщения
8
Репутация
0
Кстати, checkbox для ListView давно есть в справке. В функции GUICtrlCreateListViewItem в примере нажать кнопку "Стиль CheckBox и сетка".
В какой справке?
Еще у меня вопрос по двум верхним примерам, если я правильно понял то чекбоксы не ассоциированы с файлами а мне надо как-то сделать что ассациированы но как?
т.к мне нужно сделать чтобы читало 1 файл потом чтобы отмеченные галкой файлы дописывалить в тот файл.(хотя я не уверен что это можно осуществить на AutoIt.) а вот размер как-раз то мне не очень надо т.к по типу этого вот:
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
D3fault_Player [?]
если я правильно понял то чекбоксы не ассоциированы с файлами
Неправильно поняли:
Код:
#include <GUIConstantsEx.au3>
#include <File.au3>
#include <WinAPIEx.au3>
#include <GuiListView.au3>

Dim $aDir[3] = [@SystemDir, @WindowsDir, @MyDocumentsDir]
$iInd = 0

$hGui = GUICreate('Test My', 400, 320)
$nListView = GUICtrlCreateListView('', 2, 2, 394, 268, $GUI_SS_DEFAULT_LISTVIEW, _
		BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_CHECKBOXES, $LVS_EX_GRIDLINES))
$hListView = GUICtrlGetHandle($nListView)
_GUICtrlListView_AddColumn($nListView, 'Файл', 380)
$nButtonGo = GUICtrlCreateButton('Go', 75, 280, 100, 30)
$nButtonSave = GUICtrlCreateButton('Save', 225, 280, 100, 30)
GUISetState()

_WinAPI_EmptyWorkingSet()
While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
		Case $nButtonGo
			$aFiles = _FileListToArray($aDir[$iInd], '*', 1)
			If @error Then ContinueLoop
			Dim $aItems[$aFiles[0]][1]
			For $i = 1 To $aFiles[0]
				$aItems[$i - 1][0] = $aFiles[$i]
			Next
			$aFiles = 0
			_GUICtrlListView_DeleteAllItems($hListView)
			_GUICtrlListView_BeginUpdate($hListView)
			_GUICtrlListView_AddArray($nListView, $aItems)
			_GUICtrlListView_EndUpdate($hListView)
			;_GUICtrlListView_SetItemChecked($nListView, -1) ;Check All
			WinSetTitle($hGui, '', $aDir[$iInd])
			$aItems = 0
			$iInd += 1
			If $iInd = 3 Then $iInd = 0
		Case $nButtonSave
			$iCount = _GUICtrlListView_GetItemCount($nListView)
			If Not $iCount Then ContinueLoop
			$sText = ''
			For $i = 0 To $iCount - 1
				If _GUICtrlListView_GetItemChecked($nListView, $i) Then
					$sText &= _GUICtrlListView_GetItemText($nListView, $i) & @CRLF
				EndIf
			Next
			If Not $sText Then ContinueLoop
			$sText = 'Dir: ' & WinGetTitle($hGui) & @CRLF & @CRLF & StringTrimRight($sText, 2)
			$sFile = @ScriptDir & '\Dir_' & StringRegExpReplace(WinGetTitle($hGui), '^.*\\', '') & '.txt'
			$hFile = FileOpen($sFile, 2)
			FileWrite($hFile, $sText)
			FileClose($hFile)
			$iCount = 0
			$sText = ''
			$sFile = ''
			$hFile = 0
	EndSwitch
WEnd
 
Автор
D

D3fault_Player

Новичок
Сообщения
8
Репутация
0
madmasles, спасибо за пример понял на основе чего делать.
 
Верх