Что нового

GuiCtrlRead Не возвращает цифры из Input

saavaage

Знающий
Сообщения
171
Репутация
17
Проблема:
1. Есть код:

Код:
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 633, 450, 192, 124)
$Input1 = GUICtrlCreateInput("", 62, 40, 97, 21)
$Input2 = GUICtrlCreateInput("", 62, 106, 97, 21)

$Button_MyPage1 = GUICtrlCreateButton('Старт', 62, 200, 80, 40)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
        Case $Button_MyPage1
			_MyPage1()
	EndSwitch
WEnd

Func _MyPage1()
	GUICtrlSetState($Button_MyPage1, $GUI_DISABLE)
    $sParametr1 =''
	IF GuiCtrlRead($Input1) >0 AND GuiCtrlRead($Input1) <= GuiCtrlRead($Input2) THEN
		$sParametr1 = GuiCtrlRead($Input1) & ' ' & GuiCtrlRead($Input2)
	Else
		$sParametr1 =''
	EndIf
MsgBox(0, '', $sParametr1)

	GUICtrlSetState($Button_MyPage1, $GUI_ENABLE)


2. при вводе в $input1 - 512, а в $Input2 - 1024, Msgbox выдает пустое поле, при значениях 128 против 512, 1024 и 1536 все отрабатывает нормально.
Складывается ощущение, что числа определяются на большее-меньшее только по первым буквам 512 и 102 и т.д.
Извините за некоторый сумбур...
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 714
Потому что GUICtrlRead() возвращает строковый тип, а не целочисленный. Ты сравниваешь строки, а нужно числа, отсюда и непонятки.

Код:
Func _MyPage1()

	Local $Rd1 = Number(GUICtrlRead($Input1))
	Local $Rd2 = Number(GUICtrlRead($Input2))
	Local $Rd3 = GUICtrlRead($Input3)
	Local $sParametr1 = ''

	If ($Rd1 > 0) And ($Rd3) And ($Rd1 <= $Rd2) Then
		$sParametr1 = $Rd3 & ' ' & $Rd1 & ' ' & $Rd2
	Else
		$sParametr1 = ''
	EndIf
	MsgBox(0, '', $sParametr1, 0, $Form1)
EndFunc   ;==>_MyPage1
 
Автор
S

saavaage

Знающий
Сообщения
171
Репутация
17
пробовал и через Number - тот же результат. Сейчас посмотрю Ваш пример..

Странно, все работатет. Плохо, что свой пример с Number не сохранил...

Спсибо большое
Тема решена.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 714
saavaage, если в Input будут вводиться только числа, то я тебе еще рекомендую использовать стиль $ES_NUMBER, очень помогает.
 

dimachn

Новичок
Сообщения
9
Репутация
0
Не стал делать новую тему - проблема похожая, поправьте если что не так.

В моем случае делаем проверку раз в 10-15 мин и если сист. время больше или равно чем мы задали, то выключаем комп. Предположим сейчас 21:36, если ввести 21 12 то все норм, а если ввести 21 00 то не работает. Сделал так Number(GUICtrlRead($Input1)) но все равно где-то косяк. Направьте в нужное русло если не трудно. спс
Код:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>

#region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 399, 250)
$Button1 = GUICtrlCreateButton("Старт", 68, 32, 267, 25)
$Label2 = GUICtrlCreateLabel("Выключить компьютер в", 80, 190)
$Input1 = GUICtrlCreateInput('', 220, 187, 20, 20)
$Input2 = GUICtrlCreateInput('', 250, 187, 20, 20)
$Checkbox1 = GUICtrlCreateCheckbox('', 60, 189, 15, 15)
GUISetState(@SW_SHOW)
GUICtrlSetState($Input1, $gui_disable)
GUICtrlSetState($Input2, $gui_disable)
GUICtrlSetState($Label2, $gui_disable)
#endregion ### END Koda GUI section ###

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Checkbox1
			If GUICtrlRead($Checkbox1) = 1 Then
				GUICtrlSetState($Input1, $gui_enable)
				GUICtrlSetState($Input2, $gui_enable)
				GUICtrlSetState($Label2, $gui_enable)
			Else
				GUICtrlSetState($Input1, $gui_disable)
				GUICtrlSetState($Input2, $gui_disable)
				GUICtrlSetState($Label2, $gui_disable)
			EndIf
		Case $Button1
			$hour = Number(GUICtrlRead($Input1))
			$min = Number(GUICtrlRead($Input2))
			GUIDelete($Form1)
			Main()
			ExitLoop
	EndSwitch
WEnd

Func Main()
	If $hour <> "" Then
		If $min <> "" Then
			If @HOUR >= $hour Then
				If @MIN >= $min Then
					MsgBox(0, "info", "Выключаем компьютер")
				EndIf
			EndIf
		EndIf
	EndIf
EndFunc
 

snoitaleR

AutoIT Гуру
Сообщения
854
Репутация
223
dimachn
Не стал предлагать другой вариант, просто немного изменил исходный скрипт, вроде бы работает...

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

#region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 399, 250)
$Button1 = GUICtrlCreateButton("Старт", 68, 32, 267, 25)
$Label2 = GUICtrlCreateLabel("Выключить компьютер в", 80, 190)
$Input1 = GUICtrlCreateInput('', 220, 187, 20, 20)
$Input2 = GUICtrlCreateInput('', 250, 187, 20, 20)
$Checkbox1 = GUICtrlCreateCheckbox('', 60, 189, 15, 15)
GUISetState(@SW_SHOW)
GUICtrlSetState($Input1, $gui_disable)
GUICtrlSetState($Input2, $gui_disable)
GUICtrlSetState($Label2, $gui_disable)
#endregion ### END Koda GUI section ###

$hour=0
$min=0
$start=False

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Checkbox1
            If GUICtrlRead($Checkbox1) = 1 Then
                GUICtrlSetState($Input1, $gui_enable)
                GUICtrlSetState($Input2, $gui_enable)
                GUICtrlSetState($Label2, $gui_enable)
            Else
                GUICtrlSetState($Input1, $gui_disable)
                GUICtrlSetState($Input2, $gui_disable)
                GUICtrlSetState($Label2, $gui_disable)
            EndIf
        Case $Button1
            $hour = Number(GUICtrlRead($Input1))
            $min = Number(GUICtrlRead($Input2))
            GUIDelete($Form1)
            $start=True
            ;Main()
            ;ExitLoop
    EndSwitch
 Main()
WEnd

Func Main()
 If $start Then
  If @HOUR >= $hour Then
   If @MIN >= $min Then
    MsgBox(0, "info", "Выключаем компьютер")
    $start=False
   EndIf
  EndIf
 EndIf
EndFunc
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 320
dimachn,
snoitaleR,
1.
Код:
;...
If @HOUR >= $hour Then
   If @MIN >= $min Then
;...
А если я хочу выключить компьютер в 01:10, а сейчас 23:11? :smile:
2. Сильно грузить процессор будет, ИМХО, лучше так.
Код:
;...
While 1
	If $start Then
		Sleep(1000)
		Main()
	Else
		$nMsg = GUIGetMsg()
		Switch $nMsg
			Case $GUI_EVENT_CLOSE
				Exit
			Case $Checkbox1
				If GUICtrlRead($Checkbox1) = 1 Then
					GUICtrlSetState($Input1, $gui_enable)
					GUICtrlSetState($Input2, $gui_enable)
					GUICtrlSetState($Label2, $gui_enable)
				Else
					GUICtrlSetState($Input1, $gui_disable)
					GUICtrlSetState($Input2, $gui_disable)
					GUICtrlSetState($Label2, $gui_disable)
				EndIf
			Case $Button1
				$hour = Number(GUICtrlRead($Input1))
				$min = Number(GUICtrlRead($Input2))
				GUIDelete($Form1)
				$start = True
				;Main()
				;ExitLoop
		EndSwitch
	EndIf
WEnd
;...
 

dimachn

Новичок
Сообщения
9
Репутация
0
Спасибо за помощь. Да так действительно работает, если бы понять еще почему 1 вариант не работал. Правда тут еще нужно что-то исправить, потому как если чекбокс не активен (по умолчанию) то переменные $hour = 0, $min = 0 и если время предположим 0:22 то сработает выключение, а задумывалось не так. :smile:
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 320
dimachn [?]
если бы понять еще почему 1 вариант не работал
Потому что у Вас условие не выполнялось при "00":
Код:
$vTemp = '00'
$vTemp = Number($vTemp)
ConsoleWrite('$vTemp: ' & $vTemp & @LF)
If $vTemp <> "" Then
	ConsoleWrite('No' & @LF)
Else
	ConsoleWrite('Yes' & @LF)
EndIf
 
Верх