Имеется тестовый скрипт:
Для его проверки требуется файл Settings.ini:
и несколько файлов с расширением .sfx, произвольного содержания, расположенные рядом с тестовым скриптом.
Вопросы:
1. Почему путь, указанный в строке
не всегда срабатывает? На некоторых системах при нажатии кнопки [...] открывается папка архиватора, а на некоторых открывается окно с другой папкой, видимо запомненой системой от предыдущего сеанса поиска папки.
2. Какова логика нахождения имен файлов командой FileFindNextFile ?
По алфавиту, по размеру, по дате или вообще без всякого порядка?
В выпадающем списке поля 2 я не увидел этой логики.
3. Поле 4 (Память) зависимо от содержания поля 3 (Словарь). Так задумано. И все вроде работает, но есть ошибка. Если в пустое поле 3 вписать любое число, а затем мышкой нажать на кнопочку больше\меньше в поле 4, то поле 4 становится неактивным, но кнопка продолжает действовать. При этом все остальное окно перестает реагировать и закрыть его не получается (закрываю из панели задач).
Как это можно исправить?
Код:
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include <ComboConstants.au3>
#Include <EditConstants.au3>
_editIni()
Exit
Func _editIni()
$setini = @ScriptDir & "\Settings.ini"
; чтение настроек из ini файла
$path7Zip = IniRead($setini, 'set', 'path7Zip', '')
$nameModule = IniRead($setini, 'set', 'nameModule', '')
$dict = IniRead($setini, 'set', 'dict', '')
$useRAM = IniRead($setini, 'set', 'useRAM', '')
$hGui = GUICreate('test', 490, 585, -1, -1, $WS_SYSMENU)
; задание шрифта для окна
GUISetFont(8.5, 400, 0, "Tahoma")
; закладки
GuiCtrlCreateTab(0, 0, 490, 505)
; показ настроек из ini файла
GuiCtrlCreateTabItem('test1')
$sft = 25
$toppoz = 25
$num = 0
$col = 270
$col1 = 530 - $col - 57
$hgtlin = 20
GuiCtrlCreateLabel('Путь:', 10, $num * $toppoz + $sft + 3, $col-5, $hgtlin)
$Ipath7Zip = GUiCtrlCreateInput($path7Zip, $col, $num * $toppoz + $sft, $col1-25, $hgtlin, _
BitOR($ES_AUTOHSCROLL, $ES_LEFT, $ES_MULTILINE))
GUICtrlSetState(-1, $GUI_DISABLE)
; -----------------------------
$Button = GUICtrlCreateButton('...', $col + $col1-20, $num * $toppoz + $sft, 20, 20)
; -----------------------------
$num += 1
GuiCtrlCreateLabel('Модуль:', 10, $num * $toppoz + $sft + 3, $col-5, $hgtlin)
$InameModule = GUICtrlCreateCombo('', $col, $num * $toppoz + $sft, $col1, -1, $CBS_DROPDOWNLIST)
; поиск всех модулей для списка
$file = _search(@ScriptDir & '\*.sfx')
GUICtrlSetData(-1, $file, $nameModule)
; -----------------------------
$num += 1
GuiCtrlCreateLabel('Словарь:', 10, $num * $toppoz + $sft + 3, $col-5, $hgtlin)
$Idict = GuiCtrlCreateInput($dict, $col, $num * $toppoz + $sft, $col1)
; -----------------------------
$num += 1
$blok = $GUI_DISABLE
If $dict = '' Then $blok = $GUI_ENABLE
$IuseRAM0 = GuiCtrlCreateLabel('Память [%]:', 10, $num * $toppoz + $sft + 3, $col-5, $hgtlin)
GUICtrlSetState(-1, $blok)
$IuseRAM = GuiCtrlCreateInput($useRAM, $col, $num * $toppoz + $sft, $col-67, $hgtlin)
GUICtrlSetState(-1, $blok)
GuiCtrlCreateUpDown(-1)
GUICtrlSetLimit(-1,100,-100)
GuiCtrlCreateTabItem('')
; -----------------------------
$num = 20
; кнопки для выхода
$ok1 = GUICtrlCreateButton("OK", 10 + 303, $num * $toppoz + $sft - 7, 70)
$cancel1 = GUICtrlCreateButton("Отмена", 10 + 303 + 85, $num * $toppoz + $sft - 7, 70)
GUISetState(@SW_SHOW)
While 1
Switch GUIGetMsg()
Case 0
ContinueLoop
Case $GUI_EVENT_CLOSE, $cancel1
Exit
Case $Button
$Path = FileOpenDialog('Путь', @ProgramFilesDir & '\7-Zip', 'Исполняемые файлы (*.exe)', 3, '7zFM.exe', $hGui)
If $Path Then GUICtrlSetData($Ipath7Zip, StringRegExpReplace($Path, '\\[^\\]*$', '') & '\')
Case $Idict
$blok = $GUI_DISABLE
If GUICtrlRead($Idict) = '' Then $blok = $GUI_ENABLE
GUICtrlSetState($IuseRAM0, $blok)
GUICtrlSetState($IuseRAM, $blok)
Case $ok1
; запись секции настроек
$txtIni = 'path7Zip=' & GUICtrlRead($Ipath7Zip) & @LF & _
'nameModule=' & GUICtrlRead($InameModule) & @LF & _
'dict=' & GUICtrlRead($Idict) & @LF & _
'useRAM=' & GUICtrlRead($IuseRAM) & @LF
; IniWriteSection($setini, 'set', $txtIni)
GUIDelete()
Exit
EndSwitch
WEnd
EndFunc ;==> _editIni()
; ----------------------------------------------------------------------------------------------------------
Func _search($ts)
$search = FileFindFirstFile($ts)
If $search = -1 Then
$preskey = MsgBox(1+256, "Error", 'No File!')
Exit
EndIf
$file = ''
While 1
$file &= FileFindNextFile($search) & '|'
If @error Then ExitLoop
WEnd
FileClose($search)
Return StringReplace($file, '||', '')
EndFunc ;==> _search()
Код:
;-------------- File of options -------------
текст
[set]
path7Zip=C:\Program Files\7-Zip\
nameModule=7zsd_LZMA2.sfx
dict=
useRAM=-90
[cop]
текст
Вопросы:
1. Почему путь, указанный в строке
Код:
$Path = FileOpenDialog('Путь', @ProgramFilesDir & '\7-Zip', 'Исполняемые файлы (*.exe)', 3, '7zFM.exe', $hGui)
не всегда срабатывает? На некоторых системах при нажатии кнопки [...] открывается папка архиватора, а на некоторых открывается окно с другой папкой, видимо запомненой системой от предыдущего сеанса поиска папки.
2. Какова логика нахождения имен файлов командой FileFindNextFile ?
По алфавиту, по размеру, по дате или вообще без всякого порядка?
В выпадающем списке поля 2 я не увидел этой логики.
3. Поле 4 (Память) зависимо от содержания поля 3 (Словарь). Так задумано. И все вроде работает, но есть ошибка. Если в пустое поле 3 вписать любое число, а затем мышкой нажать на кнопочку больше\меньше в поле 4, то поле 4 становится неактивным, но кнопка продолжает действовать. При этом все остальное окно перестает реагировать и закрыть его не получается (закрываю из панели задач).
Как это можно исправить?