Что нового

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

  • Автор темы at
  • Дата начала
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 319
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 319
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)); лимит минус
 
Верх