Что нового

GUIListViewINI - привязка GUIListView к INI

Max98

Новичок
Сообщения
45
Репутация
3
AutoIt: 3.
Версия: 1.1

Категория: Элементы GUI

Описание: Работает с GUI ListView привязанным к INI файлу

Код/Пример:
Код:
#cs--------------------------------------------------------------
 Имя ...............: GUIListViewINI
 Версия AutoIt .....: 3.2.10++
 Язык ..............: Русский
 Описание ..........: Функции для работы с таблицами в INI файлах
 Автор .............: Max98
 Версия ............: 1.1
#ce--------------------------------------------------------------

#include <GUIListView.au3>

#cs-------------------------------------------------------------------------------------------------------------------
  Имя ....................: _GUIListViewLoadFromINI
  Описание ...............: Загружает таблицу из INI файла
  Синтаксис ..............: _GUICtrlListView_LoadFromINI($hListView, $hFile, $sSection, $sItemPrefix)
  Параметры ..............: $hListView - Идентификатор элемента ListView
							$hFile  - INI файл
							$sSection - Имя секции
							$sItemPrefix - Префикс пункта
  Возвращаемое значение ..: Успех - Количество граф
							Ошибка - 0 @error равен 1
  Связано с функциями ....: Нет
#ce-------------------------------------------------------------------------------------------------------------------

Func _GUICtrlListViewINI_LoadFromFile($hListView, $hFile, $sSection, $sItemPrefix)
	Local $iNum = -1, $sString, $aData[_GUICtrlListViewINI_CountItems($hFile, $sSection, $sItemPrefix) + 1]
	
	If Not FileExists($hFile) Then SetError(1)
	
	_GUICtrlListView_DeleteAllItems($hListView)
	
	While 1 = 1
		$iNum += 1
		
		$sString = IniRead($hFile, $sSection, $sItemPrefix & $iNum, "")
		
		If $sString = "" Then ExitLoop
		
		GUICtrlCreateListViewItem($sString, $hListView)
		
		$aData[$iNum] = $sString
	WEnd
	
	Return $aData
EndFunc

#cs-----------------------------------------------------------------------------------------------------------------------
  Имя ....................: _GUICtrlListView_AddItemToINI
  Описание ...............: Добавляет в INI графу ListView
  Синтаксис ..............: _GUICtrlListView_AddItemToINI($hFile, $sString, $sSection, $sItemPrefix)
							$hFile  - INI файл
							$sString - строка для ListViewItem с разделителями (например: "1|2|3")
							$sSection - Имя секции
							$sItemPrefix - Префикс пункта
  Возвращаемое значение ..: Успех - Количество граф
							Ошибка - 0 @error равен 1
  Связано с функциями ....: _GUICtrlListViewINI_CountItems
#ce-----------------------------------------------------------------------------------------------------------------------

Func _GUICtrlListViewINI_AddItem($hFile, $sString, $sSection, $sItemPrefix)
	Local $iTotal
	
	If Not FileExists($hFile) Then SetError(1)
	
	$iTotal = _GUICtrlListViewINI_CountItems($hFile, $sSection, $sItemPrefix)
	
	IniWrite($hFile, $sSection, $sItemPrefix & $iTotal, $sString)
EndFunc

#cs------------------------------------------------------------------------------------------------------------------
  Имя ....................: _GUICtrlListViewINI_CountItems
  Описание ...............: Считает количество граф ListView в INI
  Синтаксис ..............: _GUICtrlListViewINI_CountItems($hFile, $sSection, $sItemPrefix)
							$hFile  - INI файл
							$sSection - Имя секции
							$sItemPrefix - Префикс пункта
  Возвращаемое значение ..: Успех - Количество граф
							Ошибка - 0, @error равен 1
  Связано с функциями ....: Нет
#ce------------------------------------------------------------------------------------------------------------------

Func _GUICtrlListViewINI_CountItems($hFile, $sSection, $sItemPrefix)
	Local $iNum = 0, $sString
	
	If Not FileExists($hFile) Then SetError(1)
	
	While 1 = 1
		$sString = IniRead($hFile, $sSection, $sItemPrefix & $iNum, "")
		
		If $sString = "" Then
			ExitLoop
		EndIf
		
		$iNum += 1
		
	WEnd
	
	Return $iNum
EndFunc

#cs------------------------------------------------------------------------------------------------------------------
  Имя ....................: _GUICtrlListViewINI_DeleteItem
  Описание ...............: Удаляет графу ListView INI
  Синтаксис ..............: _GUICtrlListViewINI_DeleteItem($hFile, $sSection, $sItemPrefix, $iItem)
							$hFile  - INI файл
							$sSection - Имя секции
							$sItemPrefix - Префикс пункта
							$iItem - ID пункта
  Возвращаемое значение ..: Нет
  Связано с функциями ....: Нет
#ce------------------------------------------------------------------------------------------------------------------

Func _GUICtrlListViewINI_DeleteItem($hFile, $sSection, $sItemPrefix, $iItem)
	Local $iTotal = _GUICtrlListViewINI_CountItems($hFile, $sSection, $sItemPrefix), $iNum = 0
	
    IniDelete($hFile, $sSection, $sItemPrefix & $iItem)
    $aSection = IniReadSection($hFile, $sSection)
	
    If @error Then 
		MsgBox(16, "", "Ошибка. Не найден INI файл.")
		SetError(1)
	EndIf
	
	For $i = 1 To $aSection[0][0]
		If StringInStr($aSection[$i][0], $sItemPrefix, 1) > 0 Then
			IniWrite($hFile, $sSection, $sItemPrefix & $iNum, $aSection[$i][1])
			$iNum += 1
		EndIf
	Next
	
    IniDelete($hFile, $sSection, $sItemPrefix & $iTotal - 1)
EndFunc

Автор: Max98
 

Renz

Осваивающий
Сообщения
63
Репутация
36
Функция _GUICtrlListViewINI_DeleteItem
При удалении с середины функция _GUICtrlListViewINI_LoadFromFile не возвратит остальные значения после удаленного ;)
 

Renz

Осваивающий
Сообщения
63
Репутация
36
Можно так:

Код:
Func _GUICtrlListViewINI_DeleteItem($hFile, $sSection, $sItemPrefix, $iItem)
	#cs 
     Local $iTotal = _GUICtrlListViewINI_CountItems($hFile, $sSection, $sItemPrefix)
    
     $New = IniRead($hFile, $sSection, $sItemPrefix & $iTotal, "")
     IniWrite($hFile, $sSection, $sItemPrefix & $iItem, $New)
     IniDelete($hFile, $sSection, $sItemPrefix & $iTotal)
	#ce
	
	Local $iTotal = _GUICtrlListViewINI_CountItems($hFile, $sSection, $sItemPrefix), $iNum = 0
	IniDelete($hFile, $sSection, $sItemPrefix & $iItem)
	$var = IniReadSection ( $hFile, $sSection )
    If @error Then 
	     MsgBox(4096, "", "Error occured, probably no INI file.")
	Else
		For $i = 1 To $var[0][0]
			 If StringInStr ( $var[$i][0], $sItemPrefix , 1 )>0 Then
				 IniWrite($hFile, $sSection, $sItemPrefix & $iNum, $var[$i][1])
				 $iNum += 1
			 EndIf
		Next
	EndIf
	IniDelete($hFile, $sSection, $sItemPrefix & $iTotal-1)
	
EndFunc
 
Автор
M

Max98

Новичок
Сообщения
45
Репутация
3
Спасибо за совет. Код исправил. :IL_AutoIt_1: Держи плюс.
 
Верх