Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Загрузка параметров из ini файла в GUI (http://forum.oszone.net/showthread.php?t=329859)

-TRM- 18-09-2017 14:20 2765312

Загрузка параметров из ini файла в GUI
 
Приветствую, есть простенький код:
Скрытый текст

#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$Form1 = GUICreate("Form1", 303, 136, 192, 124)
$CheckViborOdin = GUICtrlCreateCheckbox("Checkbox1", 40, 24, 97, 17)
$CheckViborDva = GUICtrlCreateCheckbox("Checkbox2", 40, 48, 97, 17)
$CheckViborTri = GUICtrlCreateCheckbox("Checkbox3", 40, 72, 97, 17)
$ComboVibora = GUICtrlCreateCombo("", 40, 96, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
GUICtrlSetData($ComboVibora, "1|2|3", "2")
GUISetState(@SW_SHOW)

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

EndSwitch
WEnd

INI файл

[Settings]
$CheckViborOdin=1
$CheckViborDva=4
$CheckViborTri=1
$ComboVibora=2

Возможно ли загружать значение переменных ($CheckViborOdin, $CheckViborDva, $CheckViborTri, $ComboVibora) из ini файла, если название значений указаны в ini файле ?

Iska 18-09-2017 15:19 2765321

-TRM-, возможно. Символы $ в ini-файле ни к чему. Но какой, простите, в этом смысл для данного кода?!

Что это за оригинальный такой Checkbox:
Цитата:

Цитата -TRM-
Код:

$Checkbox3 = GUICtrlCreateCheckbox("1|2|3","3", 40, 72, 97, 17)
»

у Вас вышел?!

-TRM- 18-09-2017 15:43 2765329

Iska, прошу прощения, исправил. Просто хотелось создать универсальную процедуру, которая будет выставлять параметры по умолчанию (думаю с помощью GUICtrlSetState()). Сложность в том, что в ini файле идет текст названия реквизита, а вот как мне по этому названию найти реквизит и назначить-незнаю.

Iska 18-09-2017 16:33 2765342

-TRM-, «параметры по умолчанию» — это совсем, совсем другое, нежели переменные $CheckboxXX в Вашем коде. И ещё — скажите, что должно означать:
Цитата:

Цитата -TRM-
$Checkbox2=4 »

?! Учитывая тот факт, что элемент управления Checkbox может принимать ровно три состояния:
  • установленное;
  • не установленное;
  • неопределённое.
а?

-TRM- 18-09-2017 17:30 2765352

Цитата:

Цитата Iska
$CheckboxXX »

Они у меня могут называться по разному и привязываться к $CheckboxXX не нужно (подправил в шапке пример).
Цитата:

Цитата Iska
что должно означать »

1 - установленное, 4 - не установленное и т.д. сохраняю так
IniWrite(@ScriptDir & "\Vibor.ini", "Settings", "$CheckViborOdin", GUICtrlRead($CheckViborOdin))
а вот как обратно загрузить сохранённые значения-не знаю. Можно было бы смотреть результат из ini файла и в зависимости от результата уже назначать через GUICtrlSetState(), но хотелось бы какую то универсальность.

Iska 18-09-2017 17:58 2765364

Цитата:

Цитата -TRM-
1 - установленное, 4 - не установленное и т.д. сохраняю так
IniWrite(@ScriptDir & "\Vibor.ini", "Settings", "$CheckViborOdin", GUICtrlRead($CheckViborOdin)) »

Хорошо, с этим разобрались, это константы:
Код:

Global Const $GUI_CHECKED = 1
Global Const $GUI_INDETERMINATE = 2
Global Const $GUI_UNCHECKED = 4

из «GUIConstantsEx.au3».

Цитата:

Цитата -TRM-
INI файл »

Ещё раз: не нужно там «$», уберите.
Скрытый текст
Код:

#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

AutoItSetOption("MustDeclareVars", 1)

Local $Form1

Local $Checkbox1
Local $Checkbox2
Local $Checkbox3

Local $Combo1

Local $nMsg

Local $sIniFile = @ScriptDir & "\Vibor.ini"


$Form1 = GUICreate("Form1", 303, 136, 192, 124)

$Checkbox1 = GUICtrlCreateCheckbox("Checkbox1", 40, 24, 97, 17, $BS_AUTO3STATE)
GUICtrlSetState(-1, IniRead($sIniFile, "Settings", "Checkbox1", $GUI_CHECKED))

$Checkbox2 = GUICtrlCreateCheckbox("Checkbox2", 40, 48, 97, 17, $BS_AUTO3STATE)
GUICtrlSetState(-1, IniRead($sIniFile, "Settings", "Checkbox2", $GUI_UNCHECKED))

$Checkbox3 = GUICtrlCreateCheckbox("Checkbox3", 40, 72, 97, 17, $BS_AUTO3STATE)
GUICtrlSetState(-1, IniRead($sIniFile, "Settings", "Checkbox3", $GUI_INDETERMINATE))

$Combo1 = GUICtrlCreateCombo("", 40, 96, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
GUICtrlSetData(-1, "1|2|3", IniRead($sIniFile, "Settings", "Combo1", 2))

GUISetState(@SW_SHOW)

While 1
        $nMsg = GUIGetMsg()

        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
        EndSwitch
WEnd

Exit(0)


-TRM- 18-09-2017 18:20 2765374

Цитата:

Цитата Iska
Ещё раз: не нужно там «$», уберите. »

Убрать то уберу, НО я хотел функции передавать какой выбор загрузить:
В функции Vosstanovit не знаю как прописать

#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

AutoItSetOption("MustDeclareVars", 1)

Local $Form1

Local $Checkbox1
Local $Checkbox2
Local $Checkbox3

Local $Combo1

Local $nMsg

Local $sIniFile = @ScriptDir & "\Vibor.ini"


$Form1 = GUICreate("Form1", 303, 136, 192, 124)

$CheckViborOdin = GUICtrlCreateCheckbox("CheckViborOdin", 40, 24, 97, 17, $BS_AUTO3STATE)
;GUICtrlSetState(-1, IniRead($sIniFile, "Settings", "Checkbox1", $GUI_CHECKED))
Vosstanovit("CheckViborOdin")

$Checkbox2 = GUICtrlCreateCheckbox("Checkbox2", 40, 48, 97, 17, $BS_AUTO3STATE)
;GUICtrlSetState(-1, IniRead($sIniFile, "Settings", "Checkbox2", $GUI_UNCHECKED))
Vosstanovit("CheckViborDva")

$Checkbox3 = GUICtrlCreateCheckbox("Checkbox3", 40, 72, 97, 17, $BS_AUTO3STATE)
;GUICtrlSetState(-1, IniRead($sIniFile, "Settings", "Checkbox3", $GUI_INDETERMINATE))
Vosstanovit("CheckViborTri")

$Combo1 = GUICtrlCreateCombo("", 40, 96, 145, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL))
;GUICtrlSetData(-1, "1|2|3", IniRead($sIniFile, "Settings", "Combo1", 2))

GUISetState(@SW_SHOW)

While 1
$nMsg = GUIGetMsg()

Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd

Exit (0)

Func Vosstanovit($4toVosstanovit)
$Vibor = 4
If IniRead($sIniFile, "Settings", $4toVosstanovit, 4) = 1 Then
$Vibor = $GUI_CHECKED
ElseIf IniRead($sIniFile, "Settings", $4toVosstanovit, 4) = 2 Then
$Vibor = $GUI_INDETERMINATE
ElseIf IniRead($sIniFile, "Settings", $4toVosstanovit, 4) = 4 Then
$Vibor = $GUI_UNCHECKED
EndIf
GUICtrlSetState($ID, $Vibor) ;ТУТ НЕ ЗНАЮ КАК $ID ПРОПИСАТЬ CheckViborOdin (к примеру)
EndFunc

Iska 18-09-2017 18:36 2765377

-TRM-, сначала используйте тэг «code» и лишь затем обрамляйте его спойлером. И используйте банальные отступы при оформлении кода.

Цитата:

Цитата -TRM-
НО я хотел функции передавать какой выбор загрузить: »

Цитата:

Цитата -TRM-
ТУТ НЕ ЗНАЮ КАК $ID ПРОПИСАТЬ CheckViborOdin (к примеру) »

Я тоже не знаю, чего Вы хотите добиться. По коду ничего толком понять нельзя. Вы смешиваете в одну кучу имена переменных и строки.

-TRM- 20-09-2017 11:19 2765707

Цитата:

Цитата Iska
Вы смешиваете в одну кучу имена переменных и строки. »

Так в этом же и суть ! Мне нужно найти переменную и назначить какой то параметр, зная только название переменной в виде строки. Это вообще реально?

Iska 20-09-2017 12:06 2765718

Понятней не стало. Какую «переменную»? Где «найти»? Какой «какой-то» параметр? Чему «назначить»? Как связаны эти два понятия?

Опишите алгоритм словами.

-TRM- 21-09-2017 14:05 2765960

Iska, Если я сохраняю значение переменной $CheckViborOdin - IniWrite(@ScriptDir & "\Vibor.ini", "Settings", "$CheckViborOdin", GUICtrlRead($CheckViborOdin)), допустим оно равно 4, то как мне заново восстановить сохраненное значение переменной $CheckViborOdin если их у меня много и из ini файла IniRead(@ScriptDir & "\Vibor.ini", "Settings", "$CheckViborOdin", 2) я вижу, что переменная называется $CheckViborOdin, но только в тексте. Так понятнее ?

Iska 21-09-2017 15:22 2765972

Цитата:

Цитата -TRM-
Так понятнее ? »

Нет.

-TRM- 27-09-2017 09:05 2767197

Iska, А так : Возможно ли найти переменную по имени (текст) и установить ей значение ?

Iska 27-09-2017 09:37 2767203

-TRM-, я всё не могу понять Вас. Пишете Вы вроде-бы по-русски, но понять всё равно не могу.

На всякий случай посмотрите на Функция Assign, Функция Execute и Функция Eval — вдруг это из той самой оперы, что Вам как-то поможет.

-TRM- 29-09-2017 11:20 2767531

Iska, я эти ссылки уже смотрел, но не смог разными способами заставить работать. Вот простенький пример:
Код:

#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 615, 437, 192, 124)
Global $Checkbox1 = GUICtrlCreateCheckbox("Checkbox1", 96, 64, 97, 17)
$Checkbox2 = GUICtrlCreateCheckbox("Checkbox2", 96, 96, 97, 17)
$Combo1 = GUICtrlCreateCombo("Combo1", 96, 120, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
$Label1 = GUICtrlCreateLabel("Label1", 96, 152, 148, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $Checkbox2
                        Assign("Checkbox1", $GUI_CHECKED)

        EndSwitch
WEnd


Iska 29-09-2017 11:36 2767534

-TRM-, мне эти примеры ни к чему, я уже объяснял, что не могу понять, чего Вы хотите. Попробуйте напрячь коллег с Русское сообщество AutoIt, может у них будет меньше проблем с пониманием.

-TRM- 29-09-2017 21:15 2767639

Iska, Да тут то и вникать не нужно, просто запустить пример и посмотреть почему чекбокс не устанавливается...

Iska 29-09-2017 22:32 2767659

-TRM-, я не вижу, чтобы где-нибудь в этом коде «устанавливался чекбокс».
Цитата:

Цитата GUICtrlCreateCheckbox
Return Value
Success: the identifier (controlID) of the new control.

To set or change information in the control see GUICtrlUpdate...() functions.

Цитата:

Цитата GUICtrlSetState
$GUI_CHECKED (1) Radio, Checkbox or ListViewItem will be checked.
$GUI_INDETERMINATE (2) Checkbox having the tristate attribute will be greyed.
$GUI_UNCHECKED (4) Radio, Checkbox or ListViewItem will be unchecked.


-TRM- 30-09-2017 11:37 2767717

Iska, Вот он на форме - Global $Checkbox1 = GUICtrlCreateCheckbox("Checkbox1", 96, 64, 97, 17)
Вот попытка его установки при нажатии на второй чекбокс -
Case $Checkbox2
Assign("Checkbox1", $GUI_CHECKED)

Iska 30-09-2017 11:55 2767719

-TRM-, да с чего Вы взяли, что это:
Код:

Assign("Checkbox1", $GUI_CHECKED)
должно являться «установкой чекбокса»?! Вы просто «затираете» числом полученную ранее ссылку на идентификатор элемента управления.

Задание состояния данного элемента управления осуществляется функцией «GUICtrlSetState()».

-TRM- 30-09-2017 12:04 2767721

Iska, Я вкурсе что не правильно делаю, вот и ищу правильный ответ.
P.S. Пока с Вами переписывался, методами перебора решил свой вопрос. Ответ: GUICtrlSetState(Eval("Checkbox1"),$GUI_CHECKED)
Iska, Спасибо за попытку в помощи !

Iska 30-09-2017 12:14 2767723

Цитата:

Цитата -TRM-
P.S. Пока с Вами переписывался, методами перебора решил свой вопрос. Ответ: GUICtrlSetState(Eval("Checkbox1"),$GUI_CHECKED) »

Слава богу ;).


Время: 14:24.

Время: 14:24.
© OSzone.net 2001-