Что нового

[Элементы GUI] Как прочитать значение combo из ini файла

dimcomp

Новичок
Сообщения
66
Репутация
0
Доброго дня!
Есть такой скрипт
Код:
Global $z = 2
Global $Combo[$z]

$Combo[0] = GUICtrlCreateCombo($Combo[0], 10, 10)
GUICtrlSetData(-1, "1|2|3", $Combo[0])
...
For $i = 0 To $z - 1
	If IniRead(@ScriptDir & '\config.ini', 'Options', 'Combo' & $i, '') <= 3 Then GUICtrlSetState($Combo[$i], 1)
Next
...
For $i = 0 To $z - 1
  IniWrite(@ScriptDir & '\conf.ini', 'Options', 'Combo' & $i, GUICtrlRead($Combo[$i]))
Next

Данные в ini файл сохраняет, но не читает из него. Где ошибка?
 

edyapd

Осваивающий
Сообщения
380
Репутация
30
Может быть в названии файла?
 

joiner

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

может надо
Код:
GUICtrlSetData

:smile:
кстати, имена файлов ini разные. внимательно нужно писать
Код:
For $i = 0 To 1
  If IniRead(@ScriptDir & '\config.ini', 'Options', 'Combo' & $i, '') <= 3 Then GUICtrlSetData($Combo[$i], $i,$i)
Next
 
Автор
D

dimcomp

Новичок
Сообщения
66
Репутация
0
Да, чёт конфиг я пропустил) но всё равно
Код:
Global $z = 2
Global $Combo[$z]

$Combo[0] = GUICtrlCreateCombo($Combo[0], 10, 10)
GUICtrlSetData(-1, "1|2|3", $Combo[0])
...
For $i = 0 To $z - 1
    If IniRead(@ScriptDir & '\config.ini', 'Options', 'Combo' & $i, '') <= 3 Then GUICtrlSetData($Combo[$i], 1)
Next
...
For $i = 0 To $z - 1
  IniWrite(@ScriptDir & '\config.ini', 'Options', 'Combo' & $i, GUICtrlRead($Combo[$i]))
Next


Выдаёт результат "1", хотя в конфиге записан "3".


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

Заменил на
joiner сказал(а):
Код:
GUICtrlSetData($Combo[$i], $i,$i)
Выдаёт "0" :(
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
файл конфиг. у меня такой
Код:
[Options]
Combo1=1
Combo2=2
код такой
Код:
#include <GUIConstantsEx.au3>
Global $z = 2
Global $Combo[$z]
$Form1 = GUICreate("Form1", 314, 163, 475, 341)
$Combo[0] = GUICtrlCreateCombo('', 10, 10)
$Combo[1] = GUICtrlCreateCombo('', 10, 50)
GUISetState(@SW_SHOW)

For $i = 0 To $z - 1
  If IniRead(@ScriptDir & '\config.ini', 'Options', 'Combo' & $i, '') <= 3 Then GUICtrlSetData($Combo[$i], 1,1)
Next


While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit

	EndSwitch
WEnd
 
Автор
D

dimcomp

Новичок
Сообщения
66
Репутация
0
joiner сказал(а):
файл конфиг. у меня такой
Не работает. Немного переделал для наглядности. результат 1,1 вне зависимости от настроек в config.ini
Код:
#include <GUIConstantsEx.au3>
Global $z = 2
Global $Combo[$z]

$Form1 = GUICreate("Form1", 314, 163, 475, 341)
$Combo[0] = GUICtrlCreateCombo('', 10, 10)
GUICtrlSetData(-1, "1|2|3")
$Combo[1] = GUICtrlCreateCombo('', 10, 50)
GUICtrlSetData(-1, "1|2|3")
GUISetState(@SW_SHOW)
$Button1 = GUICtrlCreateButton("Сохранить", 200, 120, 75, 25)

For $i = 0 To $z - 1
  If IniRead(@ScriptDir & '\config.ini', 'Options', 'Combo' & $i, '') <= 3 Then GUICtrlSetData($Combo[$i],1,1)
Next

While 1
		$nmsg = GUIGetMsg()
		Switch $nmsg
		    Case $GUI_EVENT_CLOSE
                Exit
			Case $Button1
                save()	
				Exit
		EndSwitch
WEnd

func save()
For $i = 0 To $z - 1
  IniWrite(@ScriptDir & '\config.ini', 'Options', 'Combo' & $i, GUICtrlRead($Combo[$i]))
Next
EndFunc
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
dimcomp,
та откуда ж мы знаем какие конфиги ты используешь.
:shaman_s_bubnom:
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
В коде написано что конфиг читается до того как может быть вызвана функция save().
Что находится в конфиге до запуска скрипта - :shaman_s_bubnom:
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
dimcomp [?]
результат 1,1 вне зависимости от настроек в config.ini
я запутался. при запуске код читает конфиг, если возвращается число меньшее или равное трем, то ставится единица в комбо. хотя в комбо уже забиты значения. зачем они?
почему единицу нужно ставить? эти же единицы и будут записаны при сохранении.
не вижу осмысленной задачи для выполнения. все как то противоречиво.
у меня точно такой же конфиг. смотри выше. и мой код работает
что конкретно ты хочешь написать?
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Код:
[Options]
Combo0=1
Combo1=3

Код:
For $i = 0 To $z - 1
  If IniRead(@ScriptDir & '\config.ini', 'Options', 'Combo' & $i, '') <= 3 Then GUICtrlSetData($Combo[$i],1,1)
Next


результат 1,1 вне зависимости от настроек в config.ini

dimcomp, а что не так? :scratch:
 
Автор
D

dimcomp

Новичок
Сообщения
66
Репутация
0
если возвращается число меньшее или равное трем, то ставится единица в комбо.
Мне не нужна единица, Мне нужно чтобы значение которое я указал в комбо например в первом 2, во втором 3 после нажатия кнопки "сохранить", сохранились в config.ini
[Options]
Combo0=2
Combo1=3
(они сохраняются), а после открытия загрузились и в первом комбо было значение 2, во втором 3, то есть те значения которые я сохранил в прошлый раз.
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Код:
For $i = 0 To $z - 1
	$ri = IniRead(@ScriptDir & '\config.ini', 'Options', 'Combo' & $i, '')
  If $ri <= 3 Then GUICtrlSetData($Combo[$i],$ri)
Next
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
dimcomp сказал(а):
если возвращается число меньшее или равное трем, то ставится единица в комбо.
Мне не нужна единица, Мне нужно чтобы значение которое я указал в комбо например в первом 2, во втором 3 после нажатия кнопки "сохранить", сохранились в config.ini
(они сохраняются), а после открытия загрузились и в первом комбо было значение 2, во втором 3, то есть те значения которые я сохранил в прошлый раз.

Так а зачем ты проверяешь что они меньшее или равное трем ??
 
Автор
D

dimcomp

Новичок
Сообщения
66
Репутация
0
joiner, Спасибо, всё работает! А как быть если нет файла config.ini? Как назначить значения комбо по умолчанию, чтобы при отсутствии данных в config.ini он загружал их?
Так а зачем ты проверяешь что они меньшее или равное трем ??
Не знаю может оно и не надо, яж новичок) просто из списка я могу выбрать числа от 1 до 3 поэтому и поставил, если можно без этого - буду рад помощи :smile:
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
ну так в твоем коде уже есть по умолчанию
Код:
GUICtrlSetData(-1, "1|2|3","1")

Код:
For $i = 0 To $z - 1
	$ri = IniRead(@ScriptDir & '\config.ini', 'Options', 'Combo' & $i, '')
	If $ri <= 3 And Not $ri = '' Then GUICtrlSetData($Combo[$i], $ri)
Next
 
Автор
D

dimcomp

Новичок
Сообщения
66
Репутация
0
joiner, То что нужно! Спасибо! :beer:
 
Верх