Что нового

[Элементы GUI] Оптимизировать опрос ячеек GUI

Firestarter

Новичок
Сообщения
34
Репутация
0
Доброго!

Подскажите плз, как лучше оптимизировать данный скрипт, в частности опрос выбора.

Код:
For $numb = 1 to 77
$fan[$numb] = GUICtrlCreateListViewItem($asic, $list)
Next

GUISetState()
Do

Switch GUIGetMsg()
case -3
Exit

case $fan[1]
ShellExecute("1.bat")

case $fan[2]
ShellExecute("2.bat")

case $fan[3]
ShellExecute("3.bat")

;=====Тут вырезан кусок кода=======

case $fan[77]
ShellExecute("77.bat")

EndSwitch

Until 0
 

xXx

Меценат
Меценат
Сообщения
105
Репутация
33
Код:
For $numb = 1 to 77
$fan[$numb] = GUICtrlCreateListViewItem($asic, $list)
Next
GUISetState()

Do

$iMSG = GUIGetMsg()

Switch $iMSG
Case -3
Exit

Case $fan[1] To $fan[77]
ShellExecute(($iMSG-$fan[1]+1) & ".bat")

EndSwitch
Until 0
 
Автор
F

Firestarter

Новичок
Сообщения
34
Репутация
0
xXx сказал(а):
Код:
Case $fan[1] To $fan[77]
ShellExecute(($iMSG-$fan[1]+1) & ".bat")
Не пойму, почему я тут не могу свою переменную вставить?
Код:
Case $fan[1] To $fan[$max]
ShellExecute(($iMSG-$fan[1]+1) & ".bat")

Скрипт просто перестает отрабатывать.
 

Prog

Осваивающий
Сообщения
335
Репутация
31
xXx [?]
Это не сработает. Производится сравнение числа в $iMSG с диапазоном чисел ячеек 1 и 77.
Необходим цикл со сравнением каждой ячейки массива.
 
Автор
F

Firestarter

Новичок
Сообщения
34
Репутация
0
Спасибо, вроде все получилось.
 

xXx

Меценат
Меценат
Сообщения
105
Репутация
33
Prog сказал(а):
... Это не сработает...
Сработает, если только все элементы данного массива созданы по порядку, т.е. так:
Код:
For $numb = 1 to 77
$fan[$numb] = GUICtrlCreateListViewItem($asic, $list)
Next
 

михаил15

Новичок
Сообщения
8
Репутация
0
Здравствуйте участники форума и знатоки сайта.
Мне нужна помощь в следующем вопросе:
В процессе создания программы у меня возникла некая проблема,- как при запущенной программе, выполняющей какую-либо функцию, иметь возможность работать с другими элементами окна?
Для примера выкладываю код простенькой программы с окном и тремя кнопками, которая просто прибавляет единицу к указанному числу, с указанной задержкой, и в указанном диапазоне.
Одна кнопка запускает действие, две другие просто открывают окно с какими-либо сообщениями.
Проблема в том, что в процессе работы программы (в процессе складывания чисел), другие кнопки окна не действуют. И не получается заставить их работать.
Пробовал оформить блок сложения в функцию, вынесенную за пределы части которая опрашивает состояние элементов окна, - кнопки не заработали.
Пробовал вывести блок сложения в отдельную программу (.exe- файлом),- работает, но этот вариант не устраивает, т. к. передавать переменные в отдельную программу и брать из неё результаты в основное окно, я пока не умею.
Пробовал оформить блок сложения внутрь части программы, опрашивающей состояние элементов окна, - работает, но коряво, к кнопкам появляется доступ только тогда, когда программа до них "доходит".

Это простенький пример для наглядности проблемы.
Единственный вариант который работал - это оформить блок сложения в отдельную программу (.exe- файлом), но это не вариант при работе с переменными. Если кто знает как решить проблему, прошу научить меня передавать переменные в отдельную программу и брать из неё результаты.
Или научить меня правильно оформлять программу, чтобы работа одной её часть не мешала функционированию других элементов окна.

;--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
#include <GUIConstants.au3>
#include <EditConstants.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <ProgressConstants.au3>
#include <ButtonConstants.au3>

#Region ### START Koda GUI section ### Form=C:\Documents and Settings\Home\Рабочий стол\Новая папка\программа счёта.kxf
$Form1 = GUICreate("Form1", 505, 87, 193, 125)
$Input1 = GUICtrlCreateInput("Input1", 40, 16, 41, 21)
$Input2 = GUICtrlCreateInput("Input2", 112, 16, 41, 21)
$Button1 = GUICtrlCreateButton("НАЧАТЬ", 424, 16, 65, 25, 0)
$Input3 = GUICtrlCreateInput("Input3", 368, 16, 41, 21)
$Label1 = GUICtrlCreateLabel("ОТ", 16, 16, 19, 17)
$Label2 = GUICtrlCreateLabel("ДО", 88, 16, 21, 17)
$Label4 = GUICtrlCreateLabel("ПРИБАВЛЯТЬ 1, С ЗАДЕРЖКОЙ (СЕК)", 160, 16, 204, 17)
$Button2 = GUICtrlCreateButton("СООБЩЕНИЕ 1", 16, 48, 137, 25, 0)
$Button3 = GUICtrlCreateButton("СООБЩЕНИЕ 2", 160, 48, 137, 25, 0)
$Label3 = GUICtrlCreateLabel(" ", 312, 48, 175, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

GUICtrlSetData($Input1, "")
GUICtrlSetData($Input2, "")
GUICtrlSetData($Input3, "")
$i2=0

While 1
$Msg = GUIGetMsg()

If $msg = $GUI_EVENT_CLOSE Then Exit ; это встроенное значение для проверки состояния кнопки закрытия окна

If $Msg=$Button1 Then
$s1=GUICtrlRead($Input1)
$s2=GUICtrlRead($Input2)
$s3=GUICtrlRead($Input3)
$s3=$s3*1000
$i2=$s1

for $i1=$s1 to $s2
$i2=$i2+1
sleep($s3)
GUICtrlSetData($Label3, $i2)
Next

GUICtrlSetData($Label3, $i2 &" выполненно")

EndIf

If $msg=$Button2 Then MsgBox(4096, "Сообщение 1", "что-то," &@CRLF &"что-то")

If $msg=$Button3 Then MsgBox(4096, "Сообщение 2", "о чём-то," &@CRLF &"о чём-то")

sleep(10)
WEnd
;---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Заранее спасибо.
 

михаил15

Новичок
Сообщения
8
Репутация
0
Понял.
Тему создал:
мои вопросы здесь можно удалять.
 
Верх