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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Получить значение Radio (http://forum.oszone.net/showthread.php?t=314400)

VNRed_OK 29-04-2016 17:00 2630722

Получить значение Radio
 
Всем доброго здоровья.

Есть 2 формы с Radio. Первый вариант создавался раньше, с фиксированным набором Radio, и работает с требуемым результатом.

Работает
Код:

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

$iLeft = @DesktopWidth/2-115
$iTop = 10

$Window = GUICreate("Pass", 230, 174,$iLeft, $iTop)
$B_Show = GUICtrlCreateButton("Показать", 152, 144, 73, 17)
GUICtrlSetState(-1, $GUI_DISABLE)

$Group1 = GUICtrlCreateGroup("", 5, 28,220,90)
$iRadio1 = GUICtrlCreateRadio("Аа", 24, 40, 73, 17)
$iRadio2 = GUICtrlCreateRadio("Бб", 24, 64, 73, 17)
$iRadio3 = GUICtrlCreateRadio("Вв", 24, 88, 73, 17)
$iRadio4 = GUICtrlCreateRadio("Гг", 120, 40, 73, 17)
$iRadio5 = GUICtrlCreateRadio("Дд", 120, 64, 73, 17)
GUICtrlCreateGroup("", -99, -99, 1, 1)

GUISetState(@SW_SHOW)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE; $nCancel
            Exit
    Case $iRadio1 To $iRadio5
          $vaar =GUICtrlRead($nMsg,1)
          GUICtrlSetState($B_Show,$GUI_ENABLE)
                      MsgBox(0,'',$vaar)
    EndSwitch
WEnd



Но со временем немного поменялись условия и набор Radio необходимо создавать динамически - Периодически необходимо разное колличество этих Button-ов. Во втором варианте это реализовано

Не работает
Код:

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

$sPath_ini = @HomeDrive & "\Example.ini"
$iLeft = @DesktopWidth/2-115
$iTop = 10
$iLeftR =10
$iTopR = 35
$sRead = IniRead($sPath_ini, "Section", "Key", "NotFound")
$iRadio = StringSplit($sRead, ",")

$Window = GUICreate("Pass", 230, 174,$iLeft, $iTop)
$B_Show = GUICtrlCreateButton("Показать", 152, 144, 73, 17)
GUICtrlSetState(-1, $GUI_DISABLE)

$Group1 = GUICtrlCreateGroup("", 5, 28,220,90)
For $i = 1 To $iRadio[0]
  $iItem = GUICtrlCreateRadio($iRadio[$i], $iLeftR, $iTopR)
        $iTopR += 20
If $iTopR > 100 Then
        $iTopR = 35
        $iLeftR += 75
    EndIf
Next
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUISetState(@SW_SHOW)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE; $nCancel
            Exit
    Case $iItem
          $vaar =GUICtrlRead($nMsg,1)
          GUICtrlSetState($B_Show,$GUI_ENABLE)
                      MsgBox(0,'',$vaar)
    EndSwitch
WEnd



Вот только ответ получаю от последнего созданного, а надо бы от каждого, как в первом. Есть ли возможность всё это дело поправить?

Mike909 29-04-2016 17:41 2630732

через массивы:
Скрытый текст

Код:

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Array.au3>

Local $sPath_ini = @HomeDrive & "\Example.ini"
Local $iLeft = @DesktopWidth/2-115
Local $iTop = 10
Local $iLeftR =10
Local $iTopR = 35
Local $sRead = IniRead($sPath_ini, "Section", "Key", "NotFound")
Local $iRadio = StringSplit($sRead, ",")
Local $iRadio = [3,"1 radio","2 radio","3 radio"]

Local $Window = GUICreate("Pass", 230, 174,$iLeft, $iTop)
Local $B_Show = GUICtrlCreateButton("Показать", 152, 144, 73, 17)
GUICtrlSetState(-1, $GUI_DISABLE)

Local $Group1 = GUICtrlCreateGroup("", 5, 28,220,90)
Local $count = $iRadio[0]
Local $aItem = []
Local $iItem
For $i = 1 To $count
    $iItem = GUICtrlCreateRadio($iRadio[$i], $iLeftR, $iTopR)
    _ArrayAdd($aItem,$iItem)
    $iTopR += 20
        If $iTopR > 100 Then
        $iTopR = 35
        $iLeftR += 75
    EndIf
Next
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUISetState(@SW_SHOW)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE; $nCancel
            Exit
    Case $aItem[1] to $aItem[$count]
          $vaar =GUICtrlRead($nMsg,1)
          GUICtrlSetState($B_Show,$GUI_ENABLE)
                      MsgBox(0,'',$vaar)
    EndSwitch
WEnd


VNRed_OK 04-05-2016 08:39 2631673

Вложений: 1
Прошу прощения за долгий ответ. Праздники... Цитата Mike909:
через массивы: »
всё чудесно работает, но наборы Radio при этом приходится создавать вручную. Сразу я конечно то и не предупредил, моя вина, что Radio создаются автоматом из ini.-файла - сколько там значений столько и Radio. Сейчас буду пробовать прикрутить свойства массива к скрипту. Может у кого проще и быстрее получится буду благодарен т.к. не так силён в AutoIt.
ini.файлик во вложении

VNRed_OK 04-05-2016 12:33 2631767

Вложений: 1
"Допилил". Возможно не очень красиво, (пришлось ini-шку подправить), но меня устраивает:

Код:

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Array.au3>

Local $sPath_ini = @HomeDrive & "\Example.ini"
Local $iLeft = @DesktopWidth/2-115
Local $iTop = 10
Local $iLeftR =10
Local $iTopR = 35
Local $sRead = IniRead($sPath_ini, "Section", "Key", "NotFound")
Local $iRadio_R = StringSplit($sRead, ",")
Local $Window = GUICreate("Pass", 230, 174,$iLeft, $iTop)
Local $B_Show = GUICtrlCreateButton("Показать", 152, 144, 73, 17)
GUICtrlSetState(-1, $GUI_DISABLE)

    $msg = ''
    For $i = 1 To $iRadio_R[0]
        $msg &= $iRadio_R[$i]&','
  Next
$result = StringTrimLeft($msg,1)
$result = StringTrimRight($result,1)

Local $iRadio = [$iRadio_R[0],$result]
$vvv=StringReplace($result,"'",'')
$vvv=StringSplit($vvv,",")

Local $Group1 = GUICtrlCreateGroup("", 5, 28,220,90)
Local $count =$vvv [0]
Local $aItem = []
Local $iItem
For $i = 1 To $count
    $iItem = GUICtrlCreateRadio($vvv[$i], $iLeftR, $iTopR)
    _ArrayAdd($aItem,$iItem)
    $iTopR += 20
    If $iTopR > 100 Then
        $iTopR = 35
        $iLeftR += 75
    EndIf
Next
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUISetState(@SW_SHOW)


While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE; $nCancel
            Exit
    Case $aItem[1] to $aItem[$count]
          $vaar =GUICtrlRead($nMsg,1)
          GUICtrlSetState($B_Show,$GUI_ENABLE)
                      MsgBox(0,'',$vaar)
    EndSwitch
WEnd

Отдельная благодарность для Mike909 :bow: , на счёт массивов. Я бы не додумал. :dont-know
Тему закрываю.
Может кому пригодится ini-Поправленный:


Время: 22:11.

Время: 22:11.
© OSzone.net 2001-