Что нового

Как очистить GUICtrlCreateListViewItem

MaxHex

Новичок
Сообщения
16
Репутация
0
Здравствуйте, столкнулся с такой проблемой, сделал окно, в нем выводится содержимое папки которую выбрал пользователь и с помощью цикла "For" создаются строки в окне через команду "GUICtrlCreateListViewItem" (получается то что на картинке), далее перед следующим сканированием мне надо очистить окно я пробовал командой "GUICtrlDelete" но она удаляет только последнюю добавленную строку (т.к. control id одинаков для всех строк и постоянно перезаписывался), вот часть кода как я добавляю в окно:
Код:
For $i = 1 To $ListArray[0] Step 1
     $aArray[$i][0] = $ListArray[$i]
     $aArray[$i][1] = _InfoScale ($LocationJNX, $ListArray[$i])
     $aArray[$i][2] = _JNXversion ($LocationJNX, $ListArray[$i])
     $item1 = GUICtrlCreateListViewItem($aArray[$i][0] & "|" & $aArray[$i][1] & "|" & $aArray[$i][2], $idListView)
Next
подскажите как можно решить эту проблему?
 

Вложения

  • Window.png
    Window.png
    12.1 КБ · Просмотры: 7
Автор
M

MaxHex

Новичок
Сообщения
16
Репутация
0
Вопрос от части решен таким способом: после составления списка я делаю новый GUICtrlCreateListView и тогда он очищается, но на сколько это правильно и можно ли так делать? Т.е принцип такой:
Код:
$idListView = GUICtrlCreateListView("NameFile|JNX Scale|JNX Version", 10, 60, 835, 210)
For $i = 1 To $ListArray[0] Step 1
	$aArray[$i][0] = $ListArray[$i]
	$aArray[$i][1] = _InfoScale ($LocationJNX, $ListArray[$i])
	$aArray[$i][2] = _JNXversion ($LocationJNX, $ListArray[$i])
	$item1 = GUICtrlCreateListViewItem($aArray[$i][0] & "|" & $aArray[$i][1] & "|" & $aArray[$i][2], $idListView)
Next
$idListView = GUICtrlCreateListView("NameFile|JNX Scale|JNX Version", 10, 60, 835, 210)
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Код:
_GUICtrlListView_DeleteAllItems
 
Автор
M

MaxHex

Новичок
Сообщения
16
Репутация
0
Пробовал, но почему то список не очищается((( (#include <GuiListView.au3> - прописал)


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

Вот весь код (он еще не окончен поэтому есть вещи которые пока не используются):
Код:
#include <GUIConstantsEx.au3>
#include <File.au3>
#include <Array.au3>
#include <ListviewConstants.au3>
#include <EditConstants.au3>
#include <GuiListView.au3>

Const $Scale5m = 0x0012
Const $Scale8m = 0x001C
Const $Scale12m = 0x0028
Const $Scale20m = 0x004B
Const $Scale30m = 0x0059
Const $Scale50m = 0x0095
Const $Scale80m = 0x012A
Const $Scale120m = 0x0190
Const $Scale200m = 0x0255
Const $Scale300m = 0x04AA
Const $Scale500m = 0x0708
Const $Scale800m = 0x0954
Const $Scale1200m = 0x12A9
Const $Scale2000m = 0x1770
Const $Scale3000m = 0x2552
Const $Scale5000m = 0x4AA5
Const $Scale8000m = 0x61A8
Const $Scale12000m = 0x954A
Const $Scale20000m = 0x2A95
Const $Scale30000m = 0x5F90
Const $Scale50000m = 0x552D
Const $Scale80000m = 0xAA5e
Const $Scale120000m = 0x1A80
Const $Scale200000m = 0x54C6
Const $Scale300000m = 0xA9A0
Const $Scale500000m = 0x7740
Const $Scale800000m = 0x6853

Dim $aArray[1][3]; Массив для сбора информации по JNX

Local $hGUI = GUICreate("Pixel Scale", 855, 300)
Local $idListView = GUICtrlCreateListView("NameFile                             |JNX Scale|JNX Version", 10, 60, 835, 210)
Local $GetList = GUICtrlCreateButton ("Получить список", 10, 10 )
Local $Location = GUICtrlCreateButton ("Выбрать папку с картами", 110, 10 )
$ListQTY = GUICtrlCreateInput("Количество листов:", 260, 10, -1, -1, $ES_READONLY)
$LocationJNX = 0
$Clear = 0

GUISetState(@SW_SHOW, $hGUI)

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			ExitLoop
		Case $GetList

			_infoJNX ($LocationJNX)
			$Clear = $Clear + 1
		Case $Location
			$LocationJNX = FileSelectFolder ("Выберите папку с картами JNX", "", 4)
			if @error = 1 Then
				$LocationJNX = "0"
			EndIf
	EndSwitch
WEnd

Func _infoJNX ($LocationJNX) ; функция которая должна вернуть массив с данными по JNX
	If $LocationJNX <> "0" Then
		$ListArray = _FileListToArrayRec ($LocationJNX, "*.jnx;*.јnx")
		GUICtrlSetData ($ListQTY, "Количество листов: " & $ListArray[0])
		If @error = 1 Then
			MsgBox (0,"Внимание!!!", "В этой папке карт нет")
		Else
			ReDim $aArray[$ListArray[0]+1][3]
			$aArray[0][0] = $ListArray[0]

			For $i = 1 To $ListArray[0] Step 1
				$aArray[$i][0] = $ListArray[$i]
				$aArray[$i][1] = _InfoScale ($LocationJNX, $ListArray[$i])
				$aArray[$i][2] = _JNXversion ($LocationJNX, $ListArray[$i])
				$item1 = GUICtrlCreateListViewItem($aArray[$i][0] & "|" & $aArray[$i][1] & "|" & $aArray[$i][2], $idListView)
			Next
			_ArrayDisplay ($aArray)
			_GUICtrlListView_DeleteAllItems ($item1); !!!! ВОТ СЮДА ДЛЯ ТЕСТА Я ВСТАВЛЯЛ ЭТУ ФУНКЦИЮ !!!
		EndIf
		;$item1 = GUICtrlCreateListViewItem("пункт2|кол22|кол23", $idListView); добавить строку в GUICtrlCreateListView
	Else
		MsgBox (0,"Внимание!!!", "Не выбран путь к картам")
	EndIf
EndFunc

Func _JNXversion ($LocationJNX, $NameFileJNX)
	$OpenJNX = FileOpen ($LocationJNX & "\" & $NameFileJNX, 16)
	$JNXfileVersion = Int (FileRead ($OpenJNX, 1))
	If $JNXfileVersion = 4 Then
		FileClose ($OpenJNX)
		Return $JNXfileVersion
	ElseIf $JNXfileVersion = 3 Then
		FileClose ($OpenJNX)
		Return $JNXfileVersion
	Else
		FileClose ($OpenJNX)
		Return "Error Version"
	EndIf
EndFunc

Func _InfoScale ($LocationJNX, $NameFileJNX)
	$OpenJNX = FileOpen ($LocationJNX & "\" & $NameFileJNX, 16)
	$JNXfileVersion = Int (FileRead ($OpenJNX, 1))
	If $JNXfileVersion = 4 Then
		FileSetPos ($OpenJNX, 0x3C, 0)
	ElseIf $JNXfileVersion = 3 Then
		FileSetPos ($OpenJNX, 0x38, 0)
	EndIf
	$ReadScale = FileRead ($OpenJNX, 4 )
	If $ReadScale = "0x12000000" Then
		Return "5 метров"
	ElseIf $ReadScale = "0x1C000000" Then
		Return "8 метров"
	ElseIf $ReadScale = "0x28000000" Then
		Return "12 метров"
	ElseIf $ReadScale = "0x4B000000" Then
		Return "20 метров"
	ElseIf $ReadScale = "0x59000000" Then
		Return "30 метров"
	ElseIf $ReadScale = "0x95000000" Then
		Return "50 метров"
	ElseIf $ReadScale = "0x2A010000" Then
		Return "80 метров"
	ElseIf $ReadScale = "0x90010000" Then
		Return "120 метров"
	ElseIf $ReadScale = "0x55020000" Then
		Return "200 метров"
	ElseIf $ReadScale = "0xAA040000" Then
		Return "300 метров"
	ElseIf $ReadScale = "0x08070000" Then
		Return "500 метров"
	ElseIf $ReadScale = "0x54090000" Then
		Return "800 метров"
	ElseIf $ReadScale = "0xA9120000" Then
		Return "1,2 км"
	ElseIf $ReadScale = "0x70170000" Then
		Return "2 км"
	ElseIf $ReadScale = "0x52250000" Then
		Return "3 км"
	ElseIf $ReadScale = "0xA54A0000" Then
		Return "5 км"
	ElseIf $ReadScale = "0xA44A0000" Then
		Return "5 км"
	ElseIf $ReadScale = "0xA8610000" Then
		Return "8 км"
	ElseIf $ReadScale = "0x4A950000" Then
		Return "12 км"
	ElseIf $ReadScale = "0x952A0100" Then
		Return "20 км"
	ElseIf $ReadScale = "0x905F0100" Then
		Return "30 км"
	ElseIf $ReadScale = "0x2D550200" Then
		Return "50 км"
	ElseIf $ReadScale = "0x5EAA0400" Then
		Return "80 км"
	ElseIf $ReadScale = "0x801A0600" Then
		Return "120 км"
	ElseIf $ReadScale = "0xC6540900" Then
		Return "200 км"
	ElseIf $ReadScale = "0xA0A91200" Then
		Return "300 км"
	ElseIf $ReadScale = "0x40771B00" Then
		Return "500 км"
	ElseIf $ReadScale = "0x68532500" Then
		Return "800 км"
	EndIf
	Return $ReadScale
EndFunc
PS
В этом коде вставлен _GUICtrlListView_DeleteAllItems


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

MaxHex сказал(а):
Вопрос от части решен таким способом: после составления списка я делаю новый GUICtrlCreateListView и тогда он очищается, но на сколько это правильно и можно ли так делать? Т.е принцип такой:
Код:
$idListView = GUICtrlCreateListView("NameFile|JNX Scale|JNX Version", 10, 60, 835, 210)
For $i = 1 To $ListArray[0] Step 1
	$aArray[$i][0] = $ListArray[$i]
	$aArray[$i][1] = _InfoScale ($LocationJNX, $ListArray[$i])
	$aArray[$i][2] = _JNXversion ($LocationJNX, $ListArray[$i])
	$item1 = GUICtrlCreateListViewItem($aArray[$i][0] & "|" & $aArray[$i][1] & "|" & $aArray[$i][2], $idListView)
Next
$idListView = GUICtrlCreateListView("NameFile|JNX Scale|JNX Version", 10, 60, 835, 210)
После такой операции пропадает возможность выделять фаилы и пользоваться ползунком прокрутки вниз(((((
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Используется не id пункта, а хэндл всего
GUICtrlCreateListView


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

$idListView


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

Посмотри пример в справке
 
Верх