1 (изменено: kamaz, 2011-12-19 16:07:03)

Тема: AHK: iniRead&iniWrite

Добрый день уважаемые. Почитал кучу подобных тем и так же мануал по Ahk, но ни как не разобрался с данной фишкой. Для начала хочу объяснить, что хочу сделать - при запуске программы, идет считывание файла ini, в котором хранятся настройки по заданным параметрам (использовать или не использовать), все это отображается в GUI. По кнопке Save эти параметры сохраняются.

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

Код (вырезанный, возможно не работающий), отображающий всю суть программы:

If (Fingerprint= "1")


{

    IniRead, MonsterTab, %A_ScriptDir%\config.ini, Skill, vMonster
    IniRead, F1, %A_ScriptDir%\config.ini, Skill, vLength1
    IniRead, F2, %A_ScriptDir%\config.ini, Skill, vLength2
    IniRead, F3, %A_ScriptDir%\config.ini, Skill, vLength3
    IniRead, F4, %A_ScriptDir%\config.ini, Skill, vLength4

    m:=0
    a1:=0
    a2:=0
    a3:=0
    a4:=0
    
       ProcessName = Process.exe

    Gui, Add, Button, x120 y230 w210 h40 , Start
    Gui, Add, Button, x120 y270 w210 h40 , Pause
    Gui, Add, Button, x120 y310 w210 h40 , Save
 
    Gui, Add, Tab, x5 y5, Скилл|q1|q1|q1|q1
    Gui, Tab, Скилл
    Gui, Add, Text, x10 y30 w210 h20, Выбрать монстра, (сек)
    Gui, Add, Edit, x222 y30 w40 h20 vMonster, 3 // vMonster - метка, 3 - значение времени

    Gui, Add, Text, x10 y58 w210 h20 , F1: skill(сек)
    Gui, Add, Edit, x222 y58 w40 h20 vLength1, 2
    Gui, Add, Checkbox, x280 y58 vF1, Использовать

    Gui, Add, Text, x10 y86 w210 h20, F2: skill(сек)
    Gui, Add, Edit, x222 y86 w40 h20 vLength2, 3
    Gui, Add, Checkbox, x280 y86 vF2, Использовать

    Gui, Add, Text, x10 y114 w210 h20, F3: skill(сек)
    Gui, Add, Edit, x222 y114 w40 h20 vLength3, 4
    Gui, Add, Checkbox, x280 y114 vF3, Использовать

    Gui, Add, Text, x10 y142 w210 h20, F4:skill(сек)
    Gui, Add, Edit, x222 y142 w40 h20 vLength4, 5
    Gui, Add, Checkbox, x280 y142 vF4, Использовать
    
    Gui, Show, Autofit
    Return
    
    ButtonStart:
    Gui, Submit, NoHide
    If F1!= Использовать
    {
       Length1 := 6000000000
    a1=%Length1%
    }
    If F2!= Использовать
    {
       Length2 := 6000000000
    a2=%Length2%
    }
    If F3!= Использовать
    {
       Length3 := 6000000000
    a3=%Length3%
    }
    If F4 != Использовать
    {
       Length4 := 6000000000
    a4=%Length4%
    }
    
    Gosub, Show
return

Show:
k:=0
while k=0
{
if (a1<1)
      {

        Sleep, 100
        SetKeyDelay, 1
        ControlSend,, {F1}, 
        SetKeyDelay, 1
        ControlSend,, {F1}, 
        SetKeyDelay, 1
        SetKeyDelay, 10,10
        Sleep, 100

        a1=%Length1%
        a1:= a1/4
     }
    a1:=a1-1

    if (a2<1)
      {
        Sleep, 100
        SetKeyDelay, 1
        ControlSend,, {F1}, 
        SetKeyDelay, 1
        ControlSend,, {F2}, 
        SetKeyDelay, 1
        ControlSend,, {F2}, 
        SetKeyDelay, 1
         SetKeyDelay, 10,10
        
        a2=%Length2%
        a2:= a2/4
     }
    a2:=a2-1
    }
    return
    
    ButtonPause:
k:=1
Return

ESC::Pause
^ESC::ExitApp

ButtonSave:
    IniWrite, %MonsterTab%, %A_ScriptDir%\config.ini, Skill, vMonster
    IniWrite, %F1%, %A_ScriptDir%\config.ini, Skill, vLength1
    IniWrite, %F2%, %A_ScriptDir%\config.ini, Skill, vLength2
    IniWrite, %F3%, %A_ScriptDir%\config.ini, Skill, vLength3
    IniWrite, %F4%, %A_ScriptDir%\config.ini, Skill, vLength4
Return

sleep, 2000
ExitApp
}

А ini файл отображает все вот таким образом:
[Skill]
vMonster=ERROR
vLength1=ERROR
vLength2=ERROR
vLength3=ERROR
vLength4=ERROR

2

Re: AHK: iniRead&iniWrite

Вероятно, переменные F1 и т.д. пустые, т.к. в них не считаны данные из GUI. Добавьте считывание:

ButtonSave:
    Gui, Submit, NoHide
    IniWrite, %MonsterTab%, %A_ScriptDir%\config.ini, Skill, vMonster
    IniWrite, %F1%, %A_ScriptDir%\config.ini, Skill, vLength1
    IniWrite, %F2%, %A_ScriptDir%\config.ini, Skill, vLength2
    IniWrite, %F3%, %A_ScriptDir%\config.ini, Skill, vLength3
    IniWrite, %F4%, %A_ScriptDir%\config.ini, Skill, vLength4
Return

3 (изменено: kamaz, 2011-12-19 16:49:57)

Re: AHK: iniRead&iniWrite

YMP пишет:

Вероятно, переменные F1 и т.д. пустые, т.к. в них не считаны данные из GUI. Добавьте считывание:

Спасибо - это заработало.
Вот проблемка еще со считыванием временного значения. Его как то сохранить можно?

И iniread не работает.

у меня есть владка, где нет CheckBox - только поля с Edit. их как то можно сохранять? Метка на них тоже присутствует.

4

Re: AHK: iniRead&iniWrite

Gui, Submit сразу всё считывает, заполняет все переменные.
Временное значение — это что?

5

Re: AHK: iniRead&iniWrite

YMP пишет:

Gui, Submit сразу всё считывает, заполняет все переменные.
Временное значение — это что?

не правильно выразился, не временное а временнОе - то есть заданное время для повторения цикла.

6

Re: AHK: iniRead&iniWrite

kamaz пишет:

Вот проблемка еще со считыванием временного значения. Его как то сохранить можно?

Считыванием откуда?

7

Re: AHK: iniRead&iniWrite

Ну аналогично ранее написанному.

Gui, Add, Edit, x222 y58 w40 h20 vLength1, 2
IniWrite, %Length1%, %A_ScriptDir%\config.ini, Skill, vLength1

8

Re: AHK: iniRead&iniWrite

Gui, Add, Edit, x222 y58 w40 h20 vLength1 gSaveSettigs, 2
Return
SaveSettigs:
   Gui, Submit, NoHide
   IniWrite, %Length1%, %A_ScriptDir%\config.ini, Skill, vLength1
Return

9

Re: AHK: iniRead&iniWrite

Прошу прощения, а что это за игра?

10

Re: AHK: iniRead&iniWrite

creature.ws пишет:
Gui, Add, Edit, x222 y58 w40 h20 vLength1 gSaveSettigs, 2
Return
SaveSettigs:
   Gui, Submit, NoHide
   IniWrite, %Length1%, %A_ScriptDir%\config.ini, Skill, vLength1
Return

Данный способ тоже не работает. не понимаю метку gSaveSettigs - программа выдает ошибку в данной строке.

с сохранением более менее понятно - он ставит 1 если использовать, и ставит Error если нет. Но проблема с считыванием - IniRead не работает.

11 (изменено: Zohann, 2011-12-20 12:01:31)

Re: AHK: iniRead&iniWrite

Так правильнее

Gui, Add, Edit, vLength1 
Gui, Add, Button, gSaveSettigs, Сохранить
Gui, Add, Button, x+5, Считать
Gui, Show
Return
SaveSettigs:
   Gui, Submit, NoHide
   IniWrite, %Length1%, config.ini, Skill, vLength1
Return
ButtonСчитать:
IniRead, Length, config.ini, Skill, vLength1
MsgBox %Length%
Return

Вах, что я вижу, я разработчик!))) Спасибо!

12

Re: AHK: iniRead&iniWrite

OFF:

Zohann пишет:

Вах, что я вижу, я разработчик!))) Спасибо!

Вы разве письмо не получали на адрес, с которого регистрировались?

13

Re: AHK: iniRead&iniWrite

OFF, редко ящики просматриваю.

14 (изменено: kamaz, 2011-12-21 08:56:26)

Re: AHK: iniRead&iniWrite

Спасибо YMP за помощь в коде. Все теперь работает. Вот пример рабочей схемы.

IfExist, %A_ScriptDir%\config.ini   ; Если есть файл настроек,
    Gosub, ReadSettings             ; читаем настройки.
Else    ; Если файла нет, задаём значения по умолчанию.
{
    F1 = 0
    Length1 = 2
}

Gui, Add, Button, x120 y310 w210 h40 , Save
 
Gui, Add, Tab, x5 y5, Tab1|Tab2|Tab3|Tab4|Tab5
Gui, Tab, Tab1

Gui, Add, Text, x10 y58 w210 h20 , F1: умение(сек)
Gui, Add, Edit, x222 y58 w40 h20 vLength1, %Length1%
Gui, Add, Checkbox, x280 y58 vF1 Checked%F1%, Использовать
Gui, Show
Return

ReadSettings:   ; Чтение настроек.
    IniRead, F1, %A_ScriptDir%\config.ini, Skill, F1
    IniRead, Length1, %A_ScriptDir%\config.ini, Skill, Length1
Return

ButtonSave:     ; Сохранение настроек.
    Gui, Submit, NoHide
    IniWrite, %F1%, %A_ScriptDir%\config.ini, Skill, F1
    IniWrite, %Length1%, %A_ScriptDir%\config.ini, Skill, Length1
Return

GuiClose:       ; Выход из программы при закрытии окна Gui.
    ExitApp

15

Re: AHK: iniRead&iniWrite

Несколько советов.
"Если файла нет, задаём значения по умолчанию." лишнее, последний параметр IniRead как раз присвоение при ошибке чтения.

IniRead, F1, %A_ScriptDir%\config.ini, Skill, F1, 0
IniRead, Length1, %A_ScriptDir%\config.ini, Skill, Length1, 2

%A_ScriptDir% тоже можно не писать, т.к. используется по умолчанию.
Вместо x222 y58 можно писать xp+12 (12 пикселей правей предыдущего элемента), а y58 и вовсе опустить, т.к. xp+12 подразумевает ту же строку.

16

Re: AHK: iniRead&iniWrite

Мне кажется, лучше один раз проверить наличие файла, чем несколько десятков неудачных попыток чтения. Ну, хотя бы чисто эстетически. Да и прямое задание дефолтных значений более наглядно. Хотя кому как, конечно.