Что нового

Команда на продолжение скрипта в GUI окне

AngelKent

Новичок
Сообщения
33
Репутация
0
Всем добрый вечер. Столкнулся с проблемой. Надеюсь, что просто 1 команду или пропустил или не-до-писал.
В общем, нужна команда, с помощью которой окно продолжает работу после нажатия кнопки и берёт данные из GUI ячеек.

Код:
While 1
    $msg = GUIGetMsg()
    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
Select
 Case $msg=$go
    $001 = BitAND(GUICtrlRead($001), $GUI_CHECKED)
	$002 = BitAND(GUICtrlRead($002), $GUI_CHECKED)
	$003 = BitAND(GUICtrlRead($003), $GUI_CHECKED)
	$004 = BitAND(GUICtrlRead($004), $GUI_CHECKED)
	$005 = BitAND(GUICtrlRead($005), $GUI_CHECKED)
	$006 = BitAND(GUICtrlRead($006), $GUI_CHECKED)
	$007 = BitAND(GUICtrlRead($007), $GUI_CHECKED)
	$008 = BitAND(GUICtrlRead($008), $GUI_CHECKED)
	$009 = BitAND(GUICtrlRead($009), $GUI_CHECKED)
	$010 = BitAND(GUICtrlRead($010), $GUI_CHECKED)
	$011 = BitAND(GUICtrlRead($011), $GUI_CHECKED)
	$012 = BitAND(GUICtrlRead($012), $GUI_CHECKED)
	$013 = BitAND(GUICtrlRead($013), $GUI_CHECKED)
	$014 = BitAND(GUICtrlRead($014), $GUI_CHECKED)
	$015 = BitAND(GUICtrlRead($015), $GUI_CHECKED)
	$016 = BitAND(GUICtrlRead($016), $GUI_CHECKED)
	$017 = BitAND(GUICtrlRead($017), $GUI_CHECKED)
    $018 = BitAND(GUICtrlRead($018), $GUI_CHECKED)
    $019 = BitAND(GUICtrlRead($019), $GUI_CHECKED)
    $020 = BitAND(GUICtrlRead($020), $GUI_CHECKED)
ExitLoop
 Case $msg=$speed
   $mk_1 = GUICtrlRead($mk_1)
   $mk_2 = GUICtrlRead($mk_2)
   $mk_3 = GUICtrlRead($mk_3)
   $kc_1 = GUICtrlRead($kc_1)
   $kc_2 = GUICtrlRead($kc_2)
   $kc_3 = GUICtrlRead($kc_3)
   $ion = GUICtrlRead($ion)
   $k_1=$mk_1-$kc_1
   $k_2=$mk_2-$kc_2
   $k_3=$mk_3-$kc_3
   If $k_1 < 0 Then
	  $k_1=$k_1*-1
   EndIf
   If $k_2 < 0 Then
	  $k_2=$k_2*-1
   EndIf
   If $k_3 < 0 Then
	  $k_3=$k_3*-1
   EndIf
$sp=$ion*2000+10000

   MsgBox (0, 'Время', $k_1 & ' ' & $k_2 & ' ' & $k_3 & ' ' & $sp)

   EndSelect
WEnd


После первого нажатия норм работает, а после следующего применяет придаёт значения переменным "ноль", и вместо, напр., "1 3 4 22000" выдаёт "0 0 0 10000".
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
AngelKent [?]
После первого нажатия норм работает
У меня вообще не работает.
Покажите рабочий пример.
А также изложите проблему чётче.
 
Автор
A

AngelKent

Новичок
Сообщения
33
Репутация
0
Код:
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <ButtonConstants.au3>

Example()

Func Example()
$all=GUICreate(" ", 400, 700)
$group_1 = GUICtrlCreateGroup(" ", 30, 20, 340, 540)
GUIStartGroup()




$mk_1=GUICtrlCreateInput('2', 230, 570, 15, 20)
$mk_2=GUICtrlCreateInput('3', 250, 570, 15, 20)
$mk_3=GUICtrlCreateInput('4', 280, 570, 15, 20)
$kc_1=GUICtrlCreateInput('1', 230, 595, 15, 20)
$kc_2=GUICtrlCreateInput('1', 250, 595, 15, 20)
$kc_3=GUICtrlCreateInput('1', 280, 595, 15, 20)
$ion=GUICtrlCreateInput('7', 230, 620, 20, 20)
$speed=GUICtrlCreateButton("Подсчитать", 255, 617, 80)
$go=GUICtrlCreateButton("Запустить программу", 20, 660, 360)



GUISetState()

While 1
    $msg = GUIGetMsg()
    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
Select
 Case $msg=$go

ExitLoop
 Case $msg=$speed
   $mk_1 = GUICtrlRead($mk_1)
   $mk_2 = GUICtrlRead($mk_2)
   $mk_3 = GUICtrlRead($mk_3)
   $kc_1 = GUICtrlRead($kc_1)
   $kc_2 = GUICtrlRead($kc_2)
   $kc_3 = GUICtrlRead($kc_3)
   $ion = GUICtrlRead($ion)
   $k_1=$mk_1-$kc_1
   $k_2=$mk_2-$kc_2
   $k_3=$mk_3-$kc_3
   If $k_1 < 0 Then
	  $k_1=$k_1*-1
   EndIf
   If $k_2 < 0 Then
	  $k_2=$k_2*-1
   EndIf
   If $k_3 < 0 Then
	  $k_3=$k_3*-1
   EndIf
$sp=$ion*2000+10000

   MsgBox (0, 'Время', $k_1 & ' ' & $k_2 & ' ' & $k_3 & ' ' & $sp)

   EndSelect

WEnd

EndFunc

Вот. Нажми на подсчитать и увидишь разные значения
После первого нажатия норм работает, а после следующего применяет придаёт значения переменным "ноль", и вместо, напр., "1 3 4 22000" выдаёт "0 0 0 10000".
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
У вас переменные $mk_*, $kc_* и т.д. определяю ID элементов Input, а вы их изменяете при вызове функции GUICtrlRead().

Код:
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <ButtonConstants.au3>

Example()

Func Example()
	$all = GUICreate(" ", 400, 700)
	$group_1 = GUICtrlCreateGroup(" ", 30, 20, 340, 540)
	GUIStartGroup()

	$mk_1 = GUICtrlCreateInput('2', 230, 570, 15, 20)
	$mk_2 = GUICtrlCreateInput('3', 250, 570, 15, 20)
	$mk_3 = GUICtrlCreateInput('4', 280, 570, 15, 20)
	$kc_1 = GUICtrlCreateInput('1', 230, 595, 15, 20)
	$kc_2 = GUICtrlCreateInput('1', 250, 595, 15, 20)
	$kc_3 = GUICtrlCreateInput('1', 280, 595, 15, 20)
	$ion = GUICtrlCreateInput('7', 230, 620, 20, 20)
	$speed = GUICtrlCreateButton("Подсчитать", 255, 617, 80)
	$go = GUICtrlCreateButton("Запустить программу", 20, 660, 360)

	GUISetState()

	While 1
		$msg = GUIGetMsg()
		If $msg = $GUI_EVENT_CLOSE Then ExitLoop
		Select
			Case $msg = $go

				ExitLoop
			Case $msg = $speed
				$mk_1s = GUICtrlRead($mk_1)
				$mk_2s = GUICtrlRead($mk_2)
				$mk_3s = GUICtrlRead($mk_3)
				$kc_1s = GUICtrlRead($kc_1)
				$kc_2s = GUICtrlRead($kc_2)
				$kc_3s = GUICtrlRead($kc_3)
				$ions = GUICtrlRead($ion)
				$k_1 = Abs($mk_1s - $kc_1s)
				$k_2 = Abs($mk_2s - $kc_2s)
				$k_3 = Abs($mk_3s - $kc_3s)
				$sp = $ions * 2000 + 10000

				MsgBox(0, 'Время', $k_1 & ' ' & $k_2 & ' ' & $k_3 & ' ' & $sp)

		EndSelect

	WEnd

EndFunc   ;==>Example


P.S

А вообще, здесь лучше использовать массивы.
 
Автор
A

AngelKent

Новичок
Сообщения
33
Репутация
0
У вас переменные $mk_*, $kc_* и т.д. определяю ID элементов Input, а вы их изменяете при вызове функции GUICtrlRead().
Какую функцию тогда использовать?
P.S
А вообще, здесь лучше использовать массивы
Никогда с ними не работал. :(
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
AngelKent сказал(а):
Какую функцию тогда использовать?
Я же пример привел. Вообще, логика такая, вы создаете элемент GUI с помощью функций GUICtrlCreate...

Код:
$ID = GUICtrlCreate...


Эти функции возвращают уникальный ID, посредством которого вы будете впоследствии обращаться к этим элементам:

Код:
$Data = GUICtrlRead($ID)


В вашем случае вы банально теряете значение $ID, что и приводит к неправильной работе скрипта при повторном вызове, т.к. переменная $ID уже содержит данные из Input, а не уникальный идентификатор:

Код:
$ID = GUICtrlRead($ID)
 
Автор
A

AngelKent

Новичок
Сообщения
33
Репутация
0
Спасибо за разъяснение. Всё заработало.
 
Верх