1 (изменено: Glebis, 2011-04-03 11:44:08)

Тема: AHK: Почему переменная не содержит номера выбранного Radio?

Вопрос про Radio элемент управления.

Gui, 1:Add, Radio, x5 y20 w100 h20 gUPD vNLOnSay, SayToAll
Gui, 1:Add, Radio, x105 y20 w100 h20 gUPD, SayToTeam
Gui, 1:Add, Radio, x205 y20 w100 h20 gUPD, SayToSquad
Gui, Show

Upd:
{
GuiControlGet, NLOnSay
msgbox %NLOnSay%
}

В случае, если выбрано радио "SayToAll", то "NLOnSay" равняется 1. Тут всё нормально.
Я на несколько раз прочитал про Radio. Исходя из слов в статье:"Однако если только у одной кнопки из группы есть переменная, ей будет присвоен номер выбранной в данный момент кнопки: 1 - номер первой кнопки (в порядке их создания), 2 - второй и т.д".
Т.е. если выбрано радио SayToTeam, то переменная NLOnSay должна содержать номер выбранного радио, т.е. равняться 2. На деле же NLOnSay содержит 0, показывая лишь состояние 1го радио.
Вопрос: как сделать,  чтобы NLOnSay содеражал номер выбранного радио? или я опять плохо понял мат часть?

З.Ы. Статьи про GuiControlGet я так и не нашёл.

2

Re: AHK: Почему переменная не содержит номера выбранного Radio?

GuiControlGet не переведена на русский. Вот так работает у меня:

Gui, 1:Add, Radio, x5 y20 w100 h20 gUPD vNLOnSay, SayToAll
Gui, 1:Add, Radio, x105 y20 w100 h20 gUPD, SayToTeam
Gui, 1:Add, Radio, x205 y20 w100 h20 gUPD, SayToSquad
Gui, Show
Return

Upd:
    Gui, Submit, NoHide
    msgbox %NLOnSay%
Return

GuiClose:
    ExitApp

3

Re: AHK: Почему переменная не содержит номера выбранного Radio?

Всё заработало, спасибо за совет.

4

Re: AHK: Почему переменная не содержит номера выбранного Radio?

YMP пишет:

Вот так работает у меня:

  А если мне надо сохранить, а потом загрузить? У меня 10 переключателей в группе.  Сохраняю по нажатию на "Ок". Тут всё получается, единственная переменная на группу, которая содержит номер помеченной кнопки передаёт номер в ini.  При старте переменная точно получает номер из ini, но это никак не влияет на кнопки - все получаются неотмеченными.  Это переменная что, только в одну сторону только работает? Как тогда отметить нужную кнопку при загрузке?

5

Re: AHK: Почему переменная не содержит номера выбранного Radio?

Вместо присвоения в первой строке можно значение переменной загрузить из ini-файла, суть не меняется.

NLOnSay := 1 
Ch%NLOnSay% = Checked

Gui, 1:Add, Radio, %Ch1% x5 y20 w100 h20 gUPD vNLOnSay, SayToAll
Gui, 1:Add, Radio, %Ch2% x105 y20 w100 h20 gUPD, SayToTeam
Gui, 1:Add, Radio, %Ch3% x205 y20 w100 h20 gUPD, SayToSquad
Gui, Show
Return

Upd:
    Gui, Submit, NoHide
    msgbox %NLOnSay%
Return

GuiClose:
    ExitApp

6

Re: AHK: Почему переменная не содержит номера выбранного Radio?

Я говорил об одной общей переменной для всей группы.

7

Re: AHK: Почему переменная не содержит номера выбранного Radio?

Переменная NLOnSay общая. Если есть другое решение без доп.переменных, выкладывайте.

Можно, в случае большого количества переключателей, занести координаты контролов и подписи к ним в масссив, в цикле добавлять на форму. При равенстве считанной из ini переменной со встроенной переменной A_Index, контролу присваивается атрибут Checked.
Дольше описывать алгоритм, чем оформить на примере работающего кода. ))

8

Re: AHK: Почему переменная не содержит номера выбранного Radio?

Не существует способа не присваивая каждой Radio своей переменной, присвоить общей переменной нужный номер и получить отмеченное Radio с этим номером?

9 (изменено: Irbis, 2014-01-07 17:34:39)

Re: AHK: Почему переменная не содержит номера выбранного Radio?

Читай пост выше. При переключении Radio одна переменная NLOnSay хранит значение номера активного пункта.

Вариант, когда есть множество переключателей, координаты и надписи к контролам вынесены в отдельный массив.

NLOnSay := 3
Radio := [[  5, 20, 100, 20, "SayToAll"]
         ,[105, 20, 100, 20, "SayToTeam"]
         ,[205, 20, 100, 20, "SayToSquad"]]

Loop % Radio.MaxIndex()
Gui, Add, Radio, % ((A_Index = NLOnSay) ? "Checked" : "") " x" . Radio[A_Index][1]
   . " y" Radio[A_Index][2] . " w" Radio[A_Index][3] . " h" Radio[A_Index][4]
   . " gUPD" ((A_Index = 1) ? " vNLOnSay" : ""), % Radio[A_Index][5]
Gui, Show
Return

Upd:
   Gui, Submit, NoHide
   msgbox %NLOnSay%
Return

GuiClose:
   ExitApp

10

Re: AHK: Почему переменная не содержит номера выбранного Radio?

По-моему, товарищу Foma не требуется так усложнять, он затрудняется сформулировать вопрос и разобраться с примером.

IniRead, Chat_settings, Settings.ini, Options, Chat settings, 
Ch%Chat_settings% = Checked

GUI, Add, Radio, %Ch1% vMyRadio  , SayToAll
GUI, Add, Radio, %Ch2%           , SayToTeam
GUI, Add, Radio, %Ch3%           , SayToSquad
GUI, Add, Button,                , Save
Gui, Show
Return

ButtonSave:
GUI, Submit, NoHide
IniWrite, %MyRadio%, Settings.ini, Options, Chat settings
Return

11

Re: AHK: Почему переменная не содержит номера выбранного Radio?

Irbis пишет:

При переключении Radio одна переменная NLOnSay хранит значение номера активного пункта

Но без %ch1% - %ch1000000% она не работает. В этом и был вопрос, нужно ли их все прописывать.

12

Re: AHK: Почему переменная не содержит номера выбранного Radio?

Нужно, так уж работает в AutoHotkey элемент "Radio". Когда группируются несколько, всё равно нужно задавать состояние каждого поотдельности.

13

Re: AHK: Почему переменная не содержит номера выбранного Radio?

Спасибо.