Что нового

[Элементы GUI] Ошибка в скрипте после создания GUICtrlCreateInput интерфейса

A

at

Гость
Здравствуйте.
Подскажите, где ошибка в Примере_2

Этот скрипт работает правильно:

Пример_1
Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiStatusBar.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ###
$vControl = GUICreate('Control', 291, 423, 192, 113)
GUICtrlCreateGroup('', 0, 0, 289, 369)
$vDelphi = GUICtrlCreateLabel('Число из Delphi', 8, 192, 91, 17) 
$iTextDelphi = GUICtrlCreateInput('0', 94, 192, 53, 21) ;введем произвольное целое число больше 10 или меньше -10
GUICtrlCreateGroup('', -99, -99, 1, 1)
$vStatusBar1 = _GUICtrlStatusBar_Create($vControl)
$vClose = GUICtrlCreateButton('Close', 208, 376, 75, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

$vTimer = TimerInit()

While 1 ;основной цикл
	
	Sleep(100)
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE, $vClose
			Exit
    EndSwitch

	; Мониторим приложение

	If TimerDiff($vTimer) > 5*1000 Then ; Таймер 5 секунд

    Sleep(100)
	
	    $iPlus = 10; лимит плюс
		$iMinus = -10; лимит минус	
        $iDelphi = GUICtrlRead($iTextDelphi, 4) ; читаем введенное число
		
		If $iDelphi > $iPlus Then ; если число превышает лимит, тогда
			ConsoleWrite($iPlus & @CRLF)
		ElseIf $iDelphi < $iMinus Then ; если число превышает лимит, тогда
			ConsoleWrite($iMinus & @CRLF)
		EndIf
         $vTimer = TimerInit()
	 EndIf
	 
 
WEnd


А здесь я добавил переменные $iMinusLimit и $iPlusLimit и теперь скрипт работает не правильно.

Пример_2
Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiStatusBar.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ###
$vControl = GUICreate('Control', 291, 423, 192, 113)
GUICtrlCreateGroup('', 0, 0, 289, 369)
$iPlusLimit = GUICtrlCreateInput('10', 216, 192, 65, 21)
GUICtrlSetBkColor(-1, 0xC0DCC0)
$iMinusLimit = GUICtrlCreateInput('-10', 152, 192, 65, 21)
GUICtrlSetBkColor(-1, 0xFFFBF0)
$vDelphi = GUICtrlCreateLabel('Число из Delphi', 8, 192, 91, 17) 
$iTextDelphi = GUICtrlCreateInput('0', 94, 192, 53, 21)
GUICtrlCreateGroup('', -99, -99, 1, 1)
$vStatusBar1 = _GUICtrlStatusBar_Create($vControl)
$vClose = GUICtrlCreateButton('Close', 208, 376, 75, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

$vTimer = TimerInit()

While 1 ;основной цикл
	
	Sleep(100)
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE, $vClose
			Exit
    EndSwitch

	; Мониторим приложение

	If TimerDiff($vTimer) > 5*1000 Then ; Таймер 5 секунд

    Sleep(100)
	
	    $iPlus = GUICtrlRead($iPlusLimit); лимит плюс
		$iMinus = GUICtrlRead($iMinusLimit); лимит минус	
        $iDelphi = GUICtrlRead($iTextDelphi, 4) ; читаем введенное число
		
		If $iDelphi > $iPlus Then ; если число превышает лимит, тогда
			ConsoleWrite($iPlus & @CRLF)
		ElseIf $iDelphi < $iMinus Then ; если число превышает лимит, тогда
			ConsoleWrite($iMinus & @CRLF)
		EndIf
         $vTimer = TimerInit()
	 EndIf
	 
 
WEnd
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,320
at,
1. Уберите все Sleep(100) из основного цикла. Функция GUIGetMsg() сама делает нужную паузу, чтобы не грузить процессор.
2. Поменяйте
Код:
$iDelphi = GUICtrlRead($iTextDelphi, 4);7
;на
$iDelphi = GUICtrlRead($iTextDelphi)
Все должно работать.
 
Автор
A

at

Гость
Всё сделал, как подсказали, но ошибка осталась.

Задача состоит в следующем:
Если мы вводим в поле $iTextDelphi любое число >10, то скрипт должен выдать в консоль значение "10"
Если мы вводим в поле $iTextDelphi любое число <-10, то скрипт должен выдать в консоль значение "-10"

Подскажите, где ошибка в этом скрипте:
Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiStatusBar.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ###
$vControl = GUICreate('Control', 291, 423, 192, 113)
GUICtrlCreateGroup('', 0, 0, 289, 369)
$iPlusLimit = GUICtrlCreateInput('10', 216, 192, 65, 21)
GUICtrlSetBkColor(-1, 0xC0DCC0)
$iMinusLimit = GUICtrlCreateInput('-10', 152, 192, 65, 21)
GUICtrlSetBkColor(-1, 0xFFFBF0)
$vDelphi = GUICtrlCreateLabel('Число из Delphi', 8, 192, 91, 17) 
$iTextDelphi = GUICtrlCreateInput('0', 94, 192, 53, 21)
GUICtrlCreateGroup('', -99, -99, 1, 1)
$vStatusBar1 = _GUICtrlStatusBar_Create($vControl)
$vClose = GUICtrlCreateButton('Close', 208, 376, 75, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

$vTimer = TimerInit()

While 1 ;основной цикл
    
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE, $vClose
            Exit
    EndSwitch

    ; Мониторим приложение

    If TimerDiff($vTimer) > 5*1000 Then ; Таймер 5 секунд

        $iPlus = GUICtrlRead($iPlusLimit); лимит плюс
        $iMinus = GUICtrlRead($iMinusLimit); лимит минус  
        $iDelphi = GUICtrlRead($iTextDelphi) ; читаем введенное число
        
        If $iDelphi > $iPlus Then ; если число превышает лимит, тогда
            ConsoleWrite($iPlus & @CRLF)
        ElseIf $iDelphi < $iMinus Then ; если число превышает лимит, тогда
            ConsoleWrite($iMinus & @CRLF)
        EndIf
         $vTimer = TimerInit()
     EndIf
     
 
WEnd
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,320
at [?]
Если мы вводим в поле $iPlusLimit любое число >10, то скрипт должен выдать в консоль значение "10"
Если мы вводим в поле $iMinusLimit любое число <-10, то скрипт должен выдать в консоль значение "-10"
Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiStatusBar.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#region ### START Koda GUI section ###
$vControl = GUICreate('Control', 291, 423, 192, 113)
GUICtrlCreateGroup('', 0, 0, 289, 369)
$iPlusLimit = GUICtrlCreateInput('10', 216, 192, 65, 21)
GUICtrlSetBkColor(-1, 0xC0DCC0)
$iMinusLimit = GUICtrlCreateInput('-10', 152, 192, 65, 21)
GUICtrlSetBkColor(-1, 0xFFFBF0)
;$vDelphi = GUICtrlCreateLabel('Число из Delphi', 8, 192, 91, 17)
;$iTextDelphi = GUICtrlCreateInput('0', 94, 192, 53, 21)
GUICtrlCreateGroup('', -99, -99, 1, 1)
;$vStatusBar1 = _GUICtrlStatusBar_Create($vControl)
$vClose = GUICtrlCreateButton('Close', 208, 376, 75, 25)
GUISetState(@SW_SHOW)
#endregion ### END Koda GUI section ###

$vTimer = TimerInit()

While 1 ;основной цикл

	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE, $vClose
			Exit
	EndSwitch

	; Мониторим приложение

	If TimerDiff($vTimer) > 5 * 1000 Then ; Таймер 5 секунд

		$iPlus = Number(GUICtrlRead($iPlusLimit)); лимит плюс
		$iMinus = Number(GUICtrlRead($iMinusLimit)); лимит минус
		;$iDelphi = GUICtrlRead($iTextDelphi) ; читаем введенное число
		If $iPlus = 10 Then
			ConsoleWrite($iPlus & @TAB & 'В $iPlusLimit введено число 10' & @CR)
		ElseIf $iPlus > 10 Then
			ConsoleWrite($iPlus & @TAB & 'В $iPlusLimit введено число больше 10' & @CR)
		Else
			ConsoleWrite($iPlus & @TAB & 'В $iPlusLimit введено число меньше 10' & @CR)
		EndIf
		If $iMinus = -10 Then
			ConsoleWrite($iMinus & @TAB & 'В $iMinusLimit введено число -10' & @CR)
		ElseIf $iMinus > -10 Then
			ConsoleWrite($iMinus & @TAB & 'В $iMinusLimit введено число больше -10' & @CR)
		Else
			ConsoleWrite($iMinus & @TAB & 'В $iMinusLimit введено число меньше -10' & @CR)
		EndIf
		$vTimer = TimerInit()
	EndIf
WEnd
 
Автор
A

at

Гость
Ошибка в скрипте после создания GUICtrlCreateInput интерфейса

madmasles, я дико извиняюсь за то, что неправильно описал задачу. (Прошу отнестись с пониманием, второй день сижу над проблемой, все плывет уже.)
Я подкорректировал свой предыдущий пост.

Вроде разобрался. В таком виде работает правильно:

Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiStatusBar.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ###
$vControl = GUICreate('Control', 291, 423, 192, 113)
GUICtrlCreateGroup('', 0, 0, 289, 369)
$iPlusLimit = GUICtrlCreateInput('10', 216, 192, 65, 21)
GUICtrlSetBkColor(-1, 0xC0DCC0)
$iMinusLimit = GUICtrlCreateInput('-10', 152, 192, 65, 21)
GUICtrlSetBkColor(-1, 0xFFFBF0)
$vDelphi = GUICtrlCreateLabel('Число из Delphi', 8, 192, 91, 17) 
$iTextDelphi = GUICtrlCreateInput('0', 94, 192, 53, 21)
GUICtrlCreateGroup('', -99, -99, 1, 1)
$vStatusBar1 = _GUICtrlStatusBar_Create($vControl)
$vClose = GUICtrlCreateButton('Close', 208, 376, 75, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

$vTimer = TimerInit()

While 1 ;основной цикл
    
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE, $vClose
            Exit
    EndSwitch

    ; Мониторим приложение

    If TimerDiff($vTimer) > 5*1000 Then ; Таймер 5 секунд

        $iPlus = Number(GUICtrlRead($iPlusLimit)); лимит плюс
        $iMinus = Number(GUICtrlRead($iMinusLimit)); лимит минус 
        $iDelphi = GUICtrlRead($iTextDelphi) ; читаем введенное число
        
        If $iDelphi > $iPlus Then ; если число превышает лимит, тогда
            ConsoleWrite($iPlus & @CRLF)
        ElseIf $iDelphi < $iMinus Then ; если число превышает лимит, тогда
            ConsoleWrite($iMinus & @CRLF)
        EndIf
         $vTimer = TimerInit()
     EndIf
     
 
WEnd


Код:
;Ошибка в этих строках
        $iPlus = GUICtrlRead($iPlusLimit); лимит плюс
        $iMinus = GUICtrlRead($iMinusLimit); лимит минус 

 ;так правильно
       $iPlus = Number(GUICtrlRead($iPlusLimit)); лимит плюс
        $iMinus = Number(GUICtrlRead($iMinusLimit)); лимит минус
 
Верх