Что нового

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

A

at

Гость
Здравствуйте, прошу показать на моем примере.

Вводимое число в поле $Input1 должно сохраниться в скрипте вместо "1", когда нажимаем "Save". При нажатии "Close" окно должно закрыться.

Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 173, 84, 192, 114)
$Input1 = GUICtrlCreateInput("введите число", 8, 8, 85, 21)
$Save = GUICtrlCreateButton("Save", 8, 48, 75, 25)
$Close = GUICtrlCreateButton("Close", 88, 48, 75, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
			
        $vPlus = 1 ; вводимое число в поле $Input1 здесь должно сохраниться вместо "1" если нажимаем "Save"
        
   	EndSwitch
WEnd
; выход при нажатии "Close"
 

Fever

Скриптер
Сообщения
308
Репутация
112
Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 173, 84, 192, 114)
$Input1 = GUICtrlCreateInput("введите число", 8, 8, 85, 21)
$Save = GUICtrlCreateButton("Save", 8, 48, 75, 25)
$Close = GUICtrlCreateButton("Close", 88, 48, 75, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE, $Close
            Exit
		Case $Save
			$vPlus = GUICtrlRead($Input1)
			ConsoleWrite($vPlus & @CRLF)
    EndSwitch
WEnd
 
Автор
A

at

Гость
А в ConsoleWrite обязательно нужен макрос @CRLF ?
 
Автор
A

at

Гость
Спасибо, я это знаю. И всеже... можно ли обойтись без него?
 

Fever

Скриптер
Сообщения
308
Репутация
112
at [?]
имеется вввиду консоль SciTE. строка
Код:
ConsoleWrite($vPlus & @CRLF)

просто выводит значение переменной, что бы Вы ее видели и, по сути, не нужна. можно заменить на
Код:
MsgBox(0, "", $vPlus)
 
Автор
A

at

Гость
Спасибо, все понятно. Усложнил скрипт. Подскажите, пожалуйста, где ошибка ?

Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ###
$Form1 = GUICreate("Form1", 173, 128, 192, 114)
$Input1 = GUICtrlCreateInput("плюс", 0, 8, 65, 21) ;здесь впишем положительное число больше 0
$Input2 = GUICtrlCreateInput("минус", 104, 8, 65, 21) ;здесь впишем отрицательное число меньше 0
$Save = GUICtrlCreateButton("Save", 0, 48, 75, 25) ;нажмем сохранить
$Close = GUICtrlCreateButton("Close", 96, 48, 75, 25)
$Input3 = GUICtrlCreateInput("0", 0, 96, 65, 21)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE, $Close
            Exit
        Case $Save
			
            $vPlus = GUICtrlRead($Input1)
            $vMinus = GUICtrlRead($Input2)
        	$vZhislo = GUICtrlRead($Input3)
			
			;Пытаюсь вывести в консоль оба числа, но выходит почему-то только один результат...
		If $vZhislo > $vPlus Then
            ConsoleWrite($vPlus & @CRLF)      
        ElseIf $vZhislo < $vMinus Then 
            ConsoleWrite($vMinus & @CRLF)
        EndIf
        
    EndSwitch
WEnd
 

Fever

Скриптер
Сообщения
308
Репутация
112
at [?]
при таком условии в скрипте вывод обоих чисел логически не возможен ибо одно и тоже число не может быть и больше и меньше заданного
 
Автор
A

at

Гость
Подскажите, как вывести оба числа в консоль.

Код:
;скажу честно, эксперементировал по разному, и так например...
        If $vZhislo < $vPlus Then
            ConsoleWrite($vPlus & @CRLF)      
        ElseIf $vZhislo > $vMinus Then 
            ConsoleWrite($vMinus & @CRLF)
        EndIf
 

Fever

Скриптер
Сообщения
308
Репутация
112
at [?]
оба числа в консоль.

Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ###
$Form1 = GUICreate("Form1", 173, 128, 192, 114)
$Input1 = GUICtrlCreateInput("плюс", 0, 8, 65, 21) ;здесь впишем положительное число больше 0
$Input2 = GUICtrlCreateInput("минус", 104, 8, 65, 21) ;здесь впишем отрицательное число меньше 0
$Save = GUICtrlCreateButton("Save", 0, 48, 75, 25) ;нажмем сохранить
$Close = GUICtrlCreateButton("Close", 96, 48, 75, 25)
$Input3 = GUICtrlCreateInput("0", 0, 96, 65, 21)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE, $Close
            Exit
        Case $Save

            $vPlus = GUICtrlRead($Input1)
            $vMinus = GUICtrlRead($Input2)
            $vZhislo = GUICtrlRead($Input3)

            ConsoleWrite($vMinus & @CRLF & $vPlus & @CRLF)
    EndSwitch
WEnd
 
Автор
A

at

Гость
Я не совсем конкретно объяснил. Вывод в консоль должен быть именно при условии: -2 < 0 < 2.
 

Fever

Скриптер
Сообщения
308
Репутация
112
at [?]
а зачем это условие, если дальше оно ни к чему не приводит, а только к выводу данных на экран? :blink:

опишите задачу полностью
 
Автор
A

at

Гость
Задача такая. Когда значение из приложения Delphi превысит допустимый лимит в плюс или минус, произойдет остановка приложения Delphi. Вот, как-то так.

Код:
#cs ----------------------------------------------------------------------------

 AutoIt Version: 3.3.6.1
 
 Script Function:
	Monitoring and automation server.

#ce ----------------------------------------------------------------------------
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiStatusBar.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ###
$Control = GUICreate('Control', 291, 423, 192, 113)
GUICtrlCreateGroup('', 0, 0, 289, 369)
$g55plus = GUICtrlCreateInput('0', 216, 192, 65, 21)
GUICtrlSetBkColor(-1, 0xC0DCC0)
$g55minus = GUICtrlCreateInput('0', 152, 192, 65, 21)
GUICtrlSetBkColor(-1, 0xFFFBF0)
$Delphi_055 = GUICtrlCreateLabel('   Число', 8, 192, 51, 17) 
$g55s = GUICtrlCreateInput('  из Delphi', 64, 192, 73, 21)
GUICtrlCreateGroup('', -99, -99, 1, 1)
$StatusBar1 = _GUICtrlStatusBar_Create($Control)
$Save = GUICtrlCreateButton('Save', 128, 376, 75, 25)
$Close = GUICtrlCreateButton('Close', 208, 376, 75, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

$vTimerDelphi055 = TimerInit()

WinWait('Control','0')
ControlClick('Control','0','Button3')

While 1 ;основной цикл
	
	Sleep(100) ;пауза, чтобы процессор не грузился
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE, $Close
			Exit
		Case $Save

    EndSwitch

	; Мониторим приложение Delphi
	    $vPlusDelphi055 = GUICtrlRead($g55plus); лимит плюс
		$vMinusDelphi055 = GUICtrlRead($g55minus); лимит минус
		
	If TimerDiff($vTimerDelphi055) > 60000 Then ; Таймер
        $vTextpozDelphi055 = ControlGetText('G', '', '[CLASS:TEdit; INSTANCE:15]') ; получаем значения из приложения Delphi
        $vFileSumlog = FileOpen('C:\Delphi_055_log.txt', 1) ; Открываем файл _log.txt
        
	    FileWrite($vFileSumlog, @HOUR & ':' & @MIN & ':' & @SEC) ; Добавляем системное время
	    FileWrite($vFileSumlog, ' итог: ') ; Добавляем пробел
	    FileWrite($vFileSumlog,$vTextpozDelphi055 & @CRLF) ; Добавляем результат, переходим на новую строку
	    FileClose($vFileSumlog) ; Закрываем файл _log.txt

    Sleep(100)
	
         $vTextpozDelphi055 = ControlGetText('G', '', '[CLASS:TEdit; INSTANCE:15]') ; получаем значения из приложения Delphi
		 $v = StringLeft($vTextpozDelphi055, 4) ; читаем только первые четыре цифры с лева
		If $v > $vPlusDelphi055 Then ; если число превышает лимит, тогда
			ConsoleWrite($vPlusDelphi055 & @CRLF)
            StopLimit() ; вызываем функцию StopLimit
        ElseIf $v < $vMinusDelphi055 Then ; если число превышает лимит, тогда
			ConsoleWrite($vMinusDelphi055 & @CRLF)
            StopLimit() ; вызываем функцию StopLimit
        EndIf
        $vTimerDelphi055 = TimerInit()
    EndIf

WEnd

	; Функция StopLimit
	
Func StopLimit() ; вызываем фунцию StopPlus, останавливаем работу приложения Delphi
	$vTextpozDelphi = ControlGetText('G', '', '[CLASS:TEdit; INSTANCE:20]') ; получаем значения из приложения Delphi
	If $vTextpozDelphi = 0 Then
	   Sleep(100) ; ожидаем 100 мсек
	   ControlSend('G', '', '', '{Esc}') ; нажимает Esc 
	Else
	   Sleep(100) ; ожидаем 100 мсек
       ControlSend('G', '', '', '{F3}') ; нажимает F3 
	EndIf
EndFunc   ;==>StopLimit
 

Fever

Скриптер
Сообщения
308
Репутация
112
не понимаю в чем проблема, если код уже написан, надо лишь задать код в цикле под нажатие кнопки
Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiStatusBar.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ###
$Control = GUICreate('Control', 291, 423, 192, 113)
GUICtrlCreateGroup('', 0, 0, 289, 369)
$g55plus = GUICtrlCreateInput('0', 216, 192, 65, 21)
GUICtrlSetBkColor(-1, 0xC0DCC0)
$g55minus = GUICtrlCreateInput('0', 152, 192, 65, 21)
GUICtrlSetBkColor(-1, 0xFFFBF0)
$Delphi_055 = GUICtrlCreateLabel('   Число', 8, 192, 51, 17)
$g55s = GUICtrlCreateInput('  из Delphi', 64, 192, 73, 21)
GUICtrlCreateGroup('', -99, -99, 1, 1)
$StatusBar1 = _GUICtrlStatusBar_Create($Control)
$Save = GUICtrlCreateButton('Save', 128, 376, 75, 25)
$Close = GUICtrlCreateButton('Close', 208, 376, 75, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

$vTimerDelphi055 = TimerInit()

WinWait('Control','0')
ControlClick('Control','0','Button3')

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

    Sleep(100) ;пауза, чтобы процессор не грузился
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE, $Close
            Exit
        Case $Save
			; Мониторим приложение Delphi
				$vPlusDelphi055 = GUICtrlRead($g55plus); лимит плюс
				$vMinusDelphi055 = GUICtrlRead($g55minus); лимит минус

			If TimerDiff($vTimerDelphi055) > 60000 Then ; Таймер
				$vTextpozDelphi055 = ControlGetText('G', '', '[CLASS:TEdit; INSTANCE:15]') ; получаем значения из приложения Delphi
				$vFileSumlog = FileOpen('C:\Delphi_055_log.txt', 1) ; Открываем файл _log.txt

				FileWrite($vFileSumlog, @HOUR & ':' & @MIN & ':' & @SEC) ; Добавляем системное время
				FileWrite($vFileSumlog, ' итог: ') ; Добавляем пробел
				FileWrite($vFileSumlog,$vTextpozDelphi055 & @CRLF) ; Добавляем результат, переходим на новую строку
				FileClose($vFileSumlog) ; Закрываем файл _log.txt

			Sleep(100)

				 $vTextpozDelphi055 = ControlGetText('G', '', '[CLASS:TEdit; INSTANCE:15]') ; получаем значения из приложения Delphi
				 $v = StringLeft($vTextpozDelphi055, 4) ; читаем только первые четыре цифры с лева
				If $v > $vPlusDelphi055 Then ; если число превышает лимит, тогда
					ConsoleWrite($vPlusDelphi055 & @CRLF)
					StopLimit() ; вызываем функцию StopLimit
				ElseIf $v < $vMinusDelphi055 Then ; если число превышает лимит, тогда
					ConsoleWrite($vMinusDelphi055 & @CRLF)
					StopLimit() ; вызываем функцию StopLimit
				EndIf
				$vTimerDelphi055 = TimerInit()
			EndIf
    EndSwitch
WEnd

    ; Функция StopLimit

Func StopLimit() ; вызываем фунцию StopPlus, останавливаем работу приложения Delphi
    $vTextpozDelphi = ControlGetText('G', '', '[CLASS:TEdit; INSTANCE:20]') ; получаем значения из приложения Delphi
    If $vTextpozDelphi = 0 Then
       Sleep(100) ; ожидаем 100 мсек
       ControlSend('G', '', '', '{Esc}') ; нажимает Esc
    Else
       Sleep(100) ; ожидаем 100 мсек
       ControlSend('G', '', '', '{F3}') ; нажимает F3
    EndIf
EndFunc   ;==>StopLimit
 
Автор
A

at

Гость
Странно, что сам скрипт без GUI работает правильно. Ошибка появилась, только при добавлении графического интерфейса, а именно: значение в текстовом поле минус не выводится в консоль.
Перенес этот вопрос в эту тему: http://autoit-script.ru/index.php/topic,6555.new.html#new
 
Верх