Что нового

Работа с ini файлом

artpluss

Новичок
Сообщения
21
Репутация
0
Помогите разобраться.
Использую такую функцию дочернего окна.

Код:
Func _Settings_Dlg($hParent = 0)
    Local $hSettings, $iGOEM_Opt, $proba_ChckBx
   
    ;Предотвращение проблем в случае если главный GUI использует режим событий
    $iGOEM_Opt = Opt("GUIOnEventMode", 0)
    
    $hSettings_GUI = GUICreate('Настройки', 486, 411, -1, -1, -1, -1, $hParent)
    
	$SaveBtn = GUICtrlCreateButton ("Сохранить", 33, 350, 190, 30) ; кн "Сохранить"
    $ExitSattingsBtn = GUICtrlCreateButton ("Выход", 249, 350, 190, 30) ; кн "Выход"
    
	$proba_ChckBx = GUICtrlCreateCheckbox("проба", 20, 20)
	GUICtrlCreateLabel('Редактор:', 14, 43, 58, 64)
    $nIniItemPrg_Input = GUICtrlCreateInput($sIniItemPrg, 74, 40, 248, 19)
    GUICtrlSetState(-1, $GUI_DISABLE)
;~ 	$IniItemPrg_Source = $sIniItemPrg
    $IniItemPrg_name_Button = GUICtrlCreateButton('...', 326, 39, 21, 21)
	
    GUISetState(@SW_DISABLE, $hParent)
    GUISetState(@SW_SHOW, $hSettings_GUI)

    While 1
        $nMsg = GUIGetMsg()
		Switch $nMsg
			Case $GUI_EVENT_CLOSE, $ExitSattingsBtn
					ExitLoop
			Case $IniItemPrg_name_Button
				 $Path_IniItemPrg = FileOpenDialog("Выберете редактор", @ProgramFilesDir & "\", "Files (*.exe)", 3, _
					StringRegExpReplace(GUICtrlRead($nIniItemPrg_Input), "^.*\\", ""), $nMsg)
				 If @error Then
					ContinueLoop
				 EndIf
				 GUICtrlSetData($nIniItemPrg_Input, $Path_IniItemPrg)
			Case $SaveBtn
;~ 				 $proba = Number(GUICtrlRead($proba_ChckBx) = $GUI_CHECKED)
				 $sIniItemPrg = GUICtrlRead($nIniItemPrg_Input)
;~ 				 MsgBox(0,"11111111",$sIniItemPrg)
				 IniWrite($ConfigFile, "Main", "IniItemPrg", $sIniItemPrg)

			MsgBox(0,"Сообщение...","Сохранено")
			ExitLoop
		EndSwitch
    WEnd
    
    Opt("GUIOnEventMode", $iGOEM_Opt)
    GUISetState(@SW_ENABLE, $hParent)
    GUIDelete($hSettings_GUI)
EndFunc


Если просто нажимать на кнопку Сохранить то создается файл config.ini и в него записываются все необходимые значения, но если нажать на кнопку выбора редактора и выбрать любой файл, то после нажатия на кнопку сохранить ни чего не сохраняется в файл config.ini, хотя переменная $sIniItemPrg принимает нужное значение. В чем может быть дело?
 

joiner

Модератор
Локальный модератор
Сообщения
3,557
Репутация
628
я не смог решить эту проблему.
дело не в представленном скрипте. просто получается что
Код:
FileOpenDialog

не передает данные
Код:
IniWrite
 
Автор
A

artpluss

Новичок
Сообщения
21
Репутация
0
Данные то передаются (вроде бы).
Ведь если перед
Код:
IniWrite

вывести
Код:
MsgBox(0,"11111111",$sIniItemPrg)

то значение переменной
Код:
$sIniItemPrg

правильное.

Но почему эта переменная не записывается в ini файл???
Тут дело даже не в переменной, а вообще после нажатия на
Код:
FileOpenDialog

и выбора любого файла - вообще ничего не записывается в ini файл даже любое значение придуманное из головы
 

joiner

Модератор
Локальный модератор
Сообщения
3,557
Репутация
628
вот это работает
Код:
#include <GUIConstantsEx.au3>
#include <EditConstants.au3>
#include <WindowsConstants.au3>

$hGUI = GUICreate("Browse Button inside Input", 320, 100)

$aPath_Inpt = _GUICtrlCreateBttnInput("C:\", 10, 60, 300, 22)

GUISetState(@SW_SHOW, $hGUI)

While 1
    $nMsg = GUIGetMsg()

    Switch $nMsg
		Case $GUI_EVENT_CLOSE

            Exit
        Case $aPath_Inpt[0] ;Button event
            $sFile = FileOpenDialog("Open file as", "", "All supported files (*.*)", 0, "", $hGUI)
            If Not @error Then GUICtrlSetData($aPath_Inpt[1], $sFile)
			FileWrite(@ScriptDir & "\123.txt", GUICtrlRead($aPath_Inpt[1]))
    EndSwitch
WEnd

Func _GUICtrlCreateBttnInput($sText, $iLeft, $iTop, $iWidth, $iHeight)
    Local $nBtn, $nInpt, $aRet[2]

    $iWidth -= 20

    $nBtn = GUICtrlCreateButton("...", $iWidth + 8, $iTop + 1, 20.5, $iHeight - 1.5)
    GUICtrlCreateInput("", $iWidth + 9, $iTop, 20, $iHeight, BitOR($GUI_SS_DEFAULT_INPUT, $ES_READONLY, $WS_CLIPSIBLINGS))
    GUICtrlSetBkColor(-1, 0xFFFFFF)

    $nInpt = GUICtrlCreateInput($sText, $iLeft, $iTop, $iWidth, $iHeight, BitOR($GUI_SS_DEFAULT_INPUT, $WS_CLIPSIBLINGS))

    $aRet[0] = $nBtn
    $aRet[1] = $nInpt

    Return $aRet
EndFunc

взят отсюда http://autoit-script.ru/index.php/topic,5868.msg41905.html#msg41905



вобщем если писать так
Код:
FileOpenDialog('Choose a file', '', 'All files (*.*)', '', '', GUICreate(''))

то есть запись в текстовый файл
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
artpluss [?]
Тут дело даже не в переменной, а вообще после нажатия на
Код: AutoIt [Выделить]
FileOpenDialogи выбора любого файла - вообще ничего не записывается в ini файл даже любое значение придуманное из головы
Замени :
Код:
$Path_IniItemPrg = FileOpenDialog("Выберете редактор", @ProgramFilesDir & "\", "Files (*.exe)", 3, _
                    StringRegExpReplace(GUICtrlRead($nIniItemPrg_Input), "^.*\\", ""), $nMsg)



на :
Код:
$Path_IniItemPrg = FileOpenDialog("Выберете редактор", @ProgramFilesDir & "\", "Files (*.exe)", 3, _ 
	StringRegExpReplace(GUICtrlRead($nIniItemPrg_Input), "^.*\\", ""),$hSettings_GUI)


А то ты вместо :
дескриптора окна для использования в качестве родительского по отношению к этому диалоговому окну.
задаешь ID нажатой кнопки ($nMsg=$IniItemPrg_name_Button )
 

joiner

Модератор
Локальный модератор
Сообщения
3,557
Репутация
628
вот пример из указанной темы. я добавил запись в ini

Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$Form1 = GUICreate('Cделать кнопку "ОБЗОР"', 318, 100)
GUICtrlCreateLabel('Файл:', 8, 5)
$Input1 = GUICtrlCreateInput("", 8, 21, 257, 21)
$Button1 = GUICtrlCreateButton("...", 272, 18, 35, 25)
GUICtrlCreateLabel('Папка:', 8, 50)
$Input2 = GUICtrlCreateInput("", 8, 65, 257, 21)
$Button2 = GUICtrlCreateButton("...", 272, 62, 35, 25)
GUISetState(@SW_SHOW)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        case $Button1
            $file = FileOpenDialog('Choose a file', '', 'All files (*.*)', '', '', GUICreate(''))
            GUICtrlSetData($Input1, $file)
			IniWrite("123.ini","1","2",GUICtrlRead($Input1))

        Case $Button2
            $folder = FileSelectFolder("Choose a folder.", "", '', '', GUICreate(''))
            GUICtrlSetData($Input2, $folder)
			IniWrite("123.ini","2","2",GUICtrlRead($Input2))
    EndSwitch
WEnd

у меня работает
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
artpluss [?]

Это называется "Сказка про белого бычка".
Ты в посте привел пример - не рабочий.
Каждый из нас приводит его посвоему в порядок -
и все ведь работает

А ты его проверяешь на другом скрипте неизвестно каком.
Ты выложи работающий законченный фрагмент (чтобы хотя бы работал без FileOpenDialog.), а не ф-ию . Чтоб его можно было тестировать без дополнительных телодвижений



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

Александр
Не стоит приводить примеры этой простешей задачи.
Автор не может их все равно вставить правильно в свой крипт.

artpluss,
Вот "Твой" пример -рабочий :
Код:
#include<WindowsConstants.au3>
#include<GuiConstantsEx.au3>
Global $sIniItemPrg=@ScriptDir
Global $ConfigFile=@ScriptDir & "\1.ini"
_Settings_Dlg()
	
Func _Settings_Dlg($hParent = 0)
    Local $hSettings, $iGOEM_Opt, $proba_ChckBx
   
    ;Предотвращение проблем в случае если главный GUI использует режим событий
    $iGOEM_Opt = Opt("GUIOnEventMode", 0)
    
    $hSettings_GUI = GUICreate('Настройки', 486, 411, -1, -1, -1, -1, $hParent)
    
    $SaveBtn = GUICtrlCreateButton ("Сохранить", 33, 350, 190, 30) ; кн "Сохранить"
    $ExitSattingsBtn = GUICtrlCreateButton ("Выход", 249, 350, 190, 30) ; кн "Выход"
    
    $proba_ChckBx = GUICtrlCreateCheckbox("проба", 20, 20)
    GUICtrlCreateLabel('Редактор:', 14, 43, 58, 64)
    $nIniItemPrg_Input = GUICtrlCreateInput($sIniItemPrg, 74, 40, 248, 19)
   ; GUICtrlSetState(-1, $GUI_DISABLE)
;~  $IniItemPrg_Source = $sIniItemPrg
    $IniItemPrg_name_Button = GUICtrlCreateButton('...', 326, 39, 21, 21)
    
    ;GUISetState(@SW_DISABLE, $hParent)
    GUISetState(@SW_SHOW, $hSettings_GUI)

    While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
            Case $GUI_EVENT_CLOSE, $ExitSattingsBtn
                    ExitLoop
            Case $IniItemPrg_name_Button
                MsgBox(4096,'','')
	 ;$Path_IniItemPrg = FileOpenDialog("Выберете редактор", @ProgramFilesDir & "\", "Files (*.exe)", 3, _
                  ;  StringRegExpReplace(GUICtrlRead($nIniItemPrg_Input), "^.*\\", ""), $nMsg)
         $Path_IniItemPrg = FileOpenDialog("Выберете редактор", @ProgramFilesDir & "\", "Files (*.exe)", 3, _
                    StringRegExpReplace(GUICtrlRead($nIniItemPrg_Input), "^.*\\", ""), $hSettings_GUI)        
	If @error Then
                    ContinueLoop
                 EndIf
                 GUICtrlSetData($nIniItemPrg_Input, $Path_IniItemPrg)
            Case $SaveBtn
;~               $proba = Number(GUICtrlRead($proba_ChckBx) = $GUI_CHECKED)
                 $sIniItemPrg = GUICtrlRead($nIniItemPrg_Input)
;~               MsgBox(0,"11111111",$sIniItemPrg)
                 IniWrite($ConfigFile, "Main", "IniItemPrg", $sIniItemPrg)

            MsgBox(0,"Сообщение...","Сохранено")
            ExitLoop
        EndSwitch
    WEnd
    
    Opt("GUIOnEventMode", $iGOEM_Opt)
    GUISetState(@SW_ENABLE, $hParent)
    GUIDelete($hSettings_GUI)
EndFunc
 
Автор
A

artpluss

Новичок
Сообщения
21
Репутация
0
Спасибо ОГРОМНОЕ все заработало так как я и хотел.
 
Верх