#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