PDA

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


VNRed_OK
29-04-2016, 17:00
Всем доброго здоровья.

Есть 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
через массивы:


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

VNRed_OK
04-05-2016, 12:33
"Допилил". Возможно не очень красиво, (пришлось 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-Поправленный:




© OSzone.net 2001-2012