Войти

Показать полную графическую версию : [решено] Загрузка параметров из ini файла в GUI


Страниц : [1] 2

-TRM-
18-09-2017, 14:20
Приветствую, есть простенький код:

#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


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

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

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

Что это за оригинальный такой Checkbox:
$Checkbox3 = GUICtrlCreateCheckbox("1|2|3","3", 40, 72, 97, 17) »
у Вас вышел?!

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

Iska
18-09-2017, 16:33
-TRM-, «параметры по умолчанию» — это совсем, совсем другое, нежели переменные $CheckboxXX в Вашем коде. И ещё — скажите, что должно означать:
$Checkbox2=4 »
?! Учитывая тот факт, что элемент управления Checkbox может принимать ровно три состояния:

установленное;
не установленное;
неопределённое.

а?

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

Iska
18-09-2017, 17:58
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».

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
Ещё раз: не нужно там «$», уберите. »
Убрать то уберу, НО я хотел функции передавать какой выбор загрузить:

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

НО я хотел функции передавать какой выбор загрузить: »
ТУТ НЕ ЗНАЮ КАК $ID ПРОПИСАТЬ CheckViborOdin (к примеру) »
Я тоже не знаю, чего Вы хотите добиться. По коду ничего толком понять нельзя. Вы смешиваете в одну кучу имена переменных и строки.

-TRM-
20-09-2017, 11:19
Вы смешиваете в одну кучу имена переменных и строки. »
Так в этом же и суть ! Мне нужно найти переменную и назначить какой то параметр, зная только название переменной в виде строки. Это вообще реально?

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

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

-TRM-
21-09-2017, 14:05
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
Так понятнее ? »
Нет.

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

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

На всякий случай посмотрите на Функция Assign (https://autoit-script.ru/autoit3_docs/functions/Assign.htm), Функция Execute (https://autoit-script.ru/autoit3_docs/functions/Execute.htm) и Функция Eval (https://autoit-script.ru/autoit3_docs/functions/Eval.htm) — вдруг это из той самой оперы, что Вам как-то поможет.

-TRM-
29-09-2017, 11:20
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
-TRM-, мне эти примеры ни к чему, я уже объяснял, что не могу понять, чего Вы хотите. Попробуйте напрячь коллег с Русское сообщество AutoIt (https://autoit-script.ru/), может у них будет меньше проблем с пониманием.

-TRM-
29-09-2017, 21:15
Iska, Да тут то и вникать не нужно, просто запустить пример и посмотреть почему чекбокс не устанавливается...

Iska
29-09-2017, 22:32
-TRM-, я не вижу, чтобы где-нибудь в этом коде «устанавливался чекбокс».
Return Value
Success: the identifier (controlID) of the new control.

To set or change information in the control see GUICtrlUpdate...() functions.
$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
Iska, Вот он на форме - Global $Checkbox1 = GUICtrlCreateCheckbox("Checkbox1", 96, 64, 97, 17)
Вот попытка его установки при нажатии на второй чекбокс -
Case $Checkbox2
Assign("Checkbox1", $GUI_CHECKED)

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

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




© OSzone.net 2001-2012