Что нового

Одно поле ввода заменяет другое.

Detka.i.alex

Новичок
Сообщения
12
Репутация
0
Добрый день.
Сегодня решил взяться за AutoIT написать простенький калькулятор.
И столкнулся с такой проблемой:
Навожу на поле ввода что бы скопировать число а в место него появляется другое поле ввода, как и из-за чего оно появляется я понимаю не могу понять как этого избежать.
Код:
#include <GUIConstants.au3>
#include <Array.au3>

GUICreate("Калькулятор by alex", 200,200)  
GUISetState (@SW_SHOW)

$buttonc=GUICtrlCreateButton ("C",  20, 40, 40)
$buttonpi=GUICtrlCreateButton ("Pi",  60, 40, 40)
$buttonproc=GUICtrlCreateButton ("%",  100, 40, 40)
$buttonrav=GUICtrlCreateButton ("=",  140, 40, 40)
$button1=GUICtrlCreateButton ("1",  20, 65, 40)
$button2=GUICtrlCreateButton ("2",  60, 65, 40)
$button3=GUICtrlCreateButton ("3",  100, 65, 40)
$buttonplus=GUICtrlCreateButton ("+",  140, 65, 40)
$button4=GUICtrlCreateButton ("4",  20, 90, 40)
$button5=GUICtrlCreateButton ("5",  60, 90, 40)
$button6=GUICtrlCreateButton ("6",  100, 90, 40)
$buttonminus=GUICtrlCreateButton ("-",  140, 90, 40)
$button7=GUICtrlCreateButton ("7",  20, 115, 40)
$button8=GUICtrlCreateButton ("8",  60, 115, 40)
$button9=GUICtrlCreateButton ("9",  100, 115, 40)
$buttonumnoj=GUICtrlCreateButton ("*",  140, 115, 40)
$button00=GUICtrlCreateButton ("00",  20, 140, 40)
$button0=GUICtrlCreateButton ("0",  60, 140, 40)
$button000=GUICtrlCreateButton ("000",  100, 140, 40)
$buttondel=GUICtrlCreateButton ("/",  140, 140, 40)
Dim $array[100]
Dim $i=0
Dim $a,$b

While 1
    $msg = GUIGetMsg()
    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
			;button1
	If $msg = $button1 Then 
		$array[$i] = GUICtrlRead($button1)
		$a=_ArrayToString($array,"")	
		$i=$i+1
	EndIf
			;button2
	If $msg = $button2 Then 
		$array[$i] = GUICtrlRead($button2)
		$a=_ArrayToString($array,"")	
		$i=$i+1
	EndIf
			;button3
	If $msg = $button3 Then 
		$array[$i] = GUICtrlRead($button3)
		$a=_ArrayToString($array,"")
		$i=$i+1
	EndIf
			;button4
	If $msg = $button4 Then 
		$array[$i] = GUICtrlRead($button4)
		$a=_ArrayToString($array,"")
		$i=$i+1
	EndIf
			;button5
	If $msg = $button5 Then 
		$array[$i] = GUICtrlRead($button5)
		$a=_ArrayToString($array,"")	
		$i=$i+1
	EndIf
			;button6
	If $msg = $button6 Then 
		$array[$i] = GUICtrlRead($button6)
		$a=_ArrayToString($array,"")	
		$i=$i+1
	EndIf
			;button7
	If $msg = $button7 Then 
		$array[$i] = GUICtrlRead($button7)
		$a=_ArrayToString($array,"")	
		$i=$i+1
	EndIf
			;button8
	If $msg = $button8 Then 
		$array[$i] = GUICtrlRead($button8)
		$a=_ArrayToString($array,"")
		$i=$i+1
	EndIf
			;button9
	If $msg = $button9 Then 
		$array[$i] = GUICtrlRead($button9)
		$a=_ArrayToString($array,"")
		$i=$i+1
	EndIf
			;button00
	If $msg = $button00 Then 
		$array[$i] = GUICtrlRead($button00)
		$a=_ArrayToString($array,"")
		$i=$i+1
	EndIf
			;button0
	If $msg = $button0 Then 
		$array[$i] = GUICtrlRead($button0)
		$a=_ArrayToString($array,"")
		$i=$i+1
	EndIf
			;button000
	If $msg = $button000 Then 
		$array[$i] = GUICtrlRead($button000)
		$a=_ArrayToString($array,"")
		$i=$i+1
	EndIf
			;Мат операции сложение			
	if $msg=$buttonplus Then
		$b=$a
		$j=$i
		While $j >= 0
			_ArrayDelete($array, $j)
 			$j=$j-1
		WEnd
		$z="plus"
	EndIf
	if $msg=$buttonrav And $z="plus" Then 
			$a=$b+$a
	EndIf
			;Мат операции вычетание			
	if $msg=$buttonminus Then
		$b=$a
		$j=$i
		While $j >= 0
			_ArrayDelete($array, $j)
 			$j=$j-1
		WEnd
		$z="minus"
	EndIf
	if $msg=$buttonrav And $z="minus" Then 
			$a=$b-$a
	EndIf
			;Мат операции умножение
	if $msg=$buttonumnoj Then
		$b=$a
		$j=$i
		While $j >= 0
			_ArrayDelete($array, $j)
 			$j=$j-1
		WEnd
		$z="umnoj"
	EndIf
	if $msg=$buttonrav And $z="umnoj" Then 
			$a=$b*$a
	EndIf
			;Мат операции деление
	if $msg=$buttondel Then
		$b=$a
		$j=$i
		While $j >= 0
			_ArrayDelete($array, $j)
 			$j=$j-1
		WEnd
		$z="del"
	EndIf
	if $msg=$buttonrav And $z="del" Then 
			$a=$b/$a
	EndIf
			;Мат операции проценты
	if $msg=$buttonproc Then
		$b=$a
		$j=$i
		While $j >= 0
			_ArrayDelete($array, $j)
 			$j=$j-1
		WEnd
		$z="proc"
	EndIf
	if $msg=$buttonrav And $z="proc" Then 
			$a=$b/100*$a
	EndIf
			;Очистка поля
	if $msg=$buttonc Then
		$j=$i
		While $j >= 0
			_ArrayDelete($array, $j)
 			$j=$j-1
		WEnd
		$a=""
	EndIf
			;Число ПИ
	if $msg=$buttonpi Then
		$j=$i
		While $j >= 0
			_ArrayDelete($array, $j)
 			$j=$j-1
		WEnd
		$a=3.141592653589
	EndIf
	
	
			;Вывод
	if $msg=$button1 Or $msg=$button2 Or $msg=$button3 Or $msg=$button4 then GUICtrlCreateInput ($a, 10,10,180,20)
	if $msg=$button5 Or $msg=$button6 Or $msg=$button7 Or $msg=$button8 then GUICtrlCreateInput ($a, 10,10,180,20)
	if $msg=$button9 Or $msg=$button00 Or $msg=$button0 Or $msg=$button000 then GUICtrlCreateInput ($a, 10,10,180,20)
	if $msg=$buttonrav Or $msg=$buttonc Or $msg=$buttonpi then GUICtrlCreateInput ($a, 10,10,180,20)
			

	
Wend
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Теоретически могу предположить что это потому что ты в конце скрипта, в зависимости от различных данных создаешь миллион инпутов, а потом они нигде не удаляются. Да и не проще ли создав инпут однажды в начале, далее его просто патчить а не создавать каждый раз новый?
 
Автор
D

Detka.i.alex

Новичок
Сообщения
12
Репутация
0
Belfigor сказал(а):
Теоретически могу предположить что это потому что ты в конце скрипта, в зависимости от различных данных создаешь миллион инпутов, а потом они нигде не удаляются.
Это я знал. Пользуюсь автоитом первый день не знаю как их удалять.

Belfigor сказал(а):
Да и не проще ли создав инпут однажды в начале, далее его просто патчить а не создавать каждый раз новый?

Насчёт этого подскажите, я не знал.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Код:
GUICtrlSetData ( controlID, data [, default] )

Код:
$Input1 = GUICtrlCreateInput  ($a, 10,10,180,20)
GUICtrlSetData($Input1, "Hellow World!")
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Detka.i.alex [?]
Насчёт этого подскажите
Код:
#include <GUIConstants.au3>
#include <Array.au3>

GUICreate("Калькулятор by alex", 200, 200)
GUISetState(@SW_SHOW)

$buttonc = GUICtrlCreateButton("C", 20, 40, 40)
$buttonpi = GUICtrlCreateButton("Pi", 60, 40, 40)
$buttonproc = GUICtrlCreateButton("%", 100, 40, 40)
$buttonrav = GUICtrlCreateButton("=", 140, 40, 40)
$button1 = GUICtrlCreateButton("1", 20, 65, 40)
$button2 = GUICtrlCreateButton("2", 60, 65, 40)
$button3 = GUICtrlCreateButton("3", 100, 65, 40)
$buttonplus = GUICtrlCreateButton("+", 140, 65, 40)
$button4 = GUICtrlCreateButton("4", 20, 90, 40)
$button5 = GUICtrlCreateButton("5", 60, 90, 40)
$button6 = GUICtrlCreateButton("6", 100, 90, 40)
$buttonminus = GUICtrlCreateButton("-", 140, 90, 40)
$button7 = GUICtrlCreateButton("7", 20, 115, 40)
$button8 = GUICtrlCreateButton("8", 60, 115, 40)
$button9 = GUICtrlCreateButton("9", 100, 115, 40)
$buttonumnoj = GUICtrlCreateButton("*", 140, 115, 40)
$button00 = GUICtrlCreateButton("00", 20, 140, 40)
$button0 = GUICtrlCreateButton("0", 60, 140, 40)
$button000 = GUICtrlCreateButton("000", 100, 140, 40)
$buttondel = GUICtrlCreateButton("/", 140, 140, 40)

$Input = GUICtrlCreateInput("", 10, 10, 180, 20)

Dim $array[100]
Dim $i = 0
Dim $a, $b

While 1
	$nMsg = GUIGetMsg()
	
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			ExitLoop
			;button1
		Case $button1
			$array[$i] = GUICtrlRead($button1)
			$a = _ArrayToString($array, "")
			$i += 1
			;button2
		Case $button2
			$array[$i] = GUICtrlRead($button2)
			$a = _ArrayToString($array, "")
			$i += 1
			;button3
		Case $button3
			$array[$i] = GUICtrlRead($button3)
			$a = _ArrayToString($array, "")
			$i += 1
			;button4
		Case $button4
			$array[$i] = GUICtrlRead($button4)
			$a = _ArrayToString($array, "")
			$i += 1
			;button5
		Case $button5
			$array[$i] = GUICtrlRead($button5)
			$a = _ArrayToString($array, "")
			$i += 1
			;button6
		Case $button6
			$array[$i] = GUICtrlRead($button6)
			$a = _ArrayToString($array, "")
			$i += 1
			;button7
		Case $button7
			$array[$i] = GUICtrlRead($button7)
			$a = _ArrayToString($array, "")
			$i += 1
			;button8
		Case $button8
			$array[$i] = GUICtrlRead($button8)
			$a = _ArrayToString($array, "")
			$i += 1
			;button9
		Case $button9
			$array[$i] = GUICtrlRead($button9)
			$a = _ArrayToString($array, "")
			$i += 1
			;button00
		Case $button00
			$array[$i] = GUICtrlRead($button00)
			$a = _ArrayToString($array, "")
			$i += 1
			;button0
		Case $button0
			$array[$i] = GUICtrlRead($button0)
			$a = _ArrayToString($array, "")
			$i += 1
			;button000
		Case $button000
			$array[$i] = GUICtrlRead($button000)
			$a = _ArrayToString($array, "")
			$i += 1
			;Мат операции сложение
		Case $buttonplus
			$b = $a
			$j = $i
			While $j >= 0
				_ArrayDelete($array, $j)
				$j -= 1
			WEnd
			$z = "plus"
		Case $buttonrav
			If $z = "plus" Then $a = $b + $a
			;Мат операции вычетание
		Case $buttonminus
			$b = $a
			$j = $i
			While $j >= 0
				_ArrayDelete($array, $j)
				$j -= 1
			WEnd
			$z = "minus"
		Case $buttonrav
			If $z = "minus" Then $a = $b - $a
			;Мат операции умножение
		Case $buttonumnoj
			$b = $a
			$j = $i
			While $j >= 0
				_ArrayDelete($array, $j)
				$j -= 1
			WEnd
			$z = "umnoj"
		Case $buttonrav
			If $z = "umnoj" Then $a = $b * $a
			;Мат операции деление
		Case $buttondel
			$b = $a
			$j = $i
			While $j >= 0
				_ArrayDelete($array, $j)
				$j -= 1
			WEnd
			$z = "del"
		Case $buttonrav
			If $z = "del" Then $a = $b / $a
			;Мат операции проценты
		Case $buttonproc
			$b = $a
			$j = $i
			While $j >= 0
				_ArrayDelete($array, $j)
				$j -= 1
			WEnd
			$z = "proc"
		Case $buttonrav
			If $z = "proc" Then $a = $b / 100 * $a
			;Очистка поля
		Case $buttonc
			$j = $i
			While $j >= 0
				_ArrayDelete($array, $j)
				$j -= 1
			WEnd
			$a = ""
			;Число ПИ
		Case $buttonpi
			$j = $i
			While $j >= 0
				_ArrayDelete($array, $j)
				$j -= 1
			WEnd
			$a = 3.141592653589
	EndSwitch
	
	;Вывод
	If $nMsg > 0 Then
		GUICtrlSetData($Input, $a)
	EndIf
WEnd


Но это не совсем правильный метод построения калькулятора, рано или поздно этот скрипт вывалится с ошибкой связанной с массивами.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Detka.i.alex
Для работы с GUICtrlCreateInput используйте GUICtrlRead и GUICtrlSetData последняя с нулевым параметром дата обнулит значение в GUICtrlCreateInput
Почитайте в справке раздел "GUIManagement" и ли в русской справке "Графический интерфейс пользователя"!


Добавлено:
Сообщение автоматически объединено:

OffTopic:
Пока писал CreatoR уже ответил :smile:
 
Автор
D

Detka.i.alex

Новичок
Сообщения
12
Репутация
0
CreatoR [?]
Но это не совсем правильный метод построения калькулятора, рано или поздно этот скрипт вывалится с ошибкой связанной с массивами.

Это моя первая программа. Я её так написал для того что бы понять как и что.

Belfigor
Спасибо за помощь
 
Верх