Что нового

[Элементы GUI] Создание ограниченного ввода в инпут

depodimon

Новичок
Сообщения
26
Репутация
0
Нужна помощь! Вообщем нужно ввести номер договора по маске: только цифры, в первом поле не больше 3 символов и во втором! А по нажатии на кнопку ОК, уже дальше передавались данные в двух переменных $dogovor_one и $dogovor_two к примеру Можно сделать такие условия?
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
depodimon [?]
Вообщем нужно ввести номер договора
ввести куда?
А по нажатии на кнопку ОК, уже дальше передавались данные в двух переменных $dogovor_one и $dogovor_two к примеру
опять же, передавались куда?
Можно сделать такие условия?
можно
 
Автор
D

depodimon

Новичок
Сообщения
26
Репутация
0
Так наполовину разобрался

Сделал так:

Код:
$labe = GUICtrlCreateLabel("Введите ваш номер договора:", 20,20,170,20)
$label1 = GUICtrlCreateLabel(".", 226,20,10,20)

$dogovor_one = GUICtrlCreateInput("", 195, 15, 30, 19, $ES_NUMBER)
GUICtrlSetLimit(-1, 3)
$dogovor_two = GUICtrlCreateInput("", 230, 15, 30, 19, $ES_NUMBER)
GUICtrlSetLimit(-1, 3)
$route_192 = GUICtrlCreateButton("Прописать",265,12,90,-1)


А как сделать, чтобы если не чего не ввёл то при нажатии на кнопку писал что пусто

Далее $dogovor_one и $dogovor_two идёт сюда:

Код:
RunWait(@Comspec & ' /c route -p add 192.168.0.0 mask 255.255.0.0 192.168.' & $dogovor_one & '.' & $dogovor_two & ' metric 1',"",@SW_HIDE)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
depodimon
Попробуйте Назначить $route_192 выполнение следующей функции:
Код:
Func _MyWrite()
$one = GUICtrlRead($dogovor_one)
$two = GUICtrlRead($dogovor_two)
If $one = "" Then
	MsgBox(0, "", "Вы не заполнили Договор 1")
	Return
ElseIf $two = "" Then
	MsgBox(0, "", "Вы не заполнили Договор 2")
	Return
EndIf
; дальнейший код.
EndFunc
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
depodimon [?]

Почему все вроде пашет ( madmasles ведь все разжевал )
Код:
#include <GuiEdit.au3>
 
$hGUI = GUICreate("Test", 400, 100)

GUICtrlCreateLabel("Введите ваш номер договора:", 20,20,170,20)
$dogovor_one = GUICtrlCreateInput("", 195, 15, 30, 19, $ES_NUMBER)
GUICtrlSetLimit(-1, 3)
$dogovor_two = GUICtrlCreateInput("", 230, 15, 30, 19, $ES_NUMBER)
GUICtrlSetLimit(-1, 3)
$route_192 = GUICtrlCreateButton("Прописать",265,12,90,-1)

GUISetState()

While 1
   $nMsg = GUIGetMsg()
    
   Switch $nMsg
	  Case -3
		 Exit
	  Case $route_192
		 _MyWrite()
   EndSwitch
WEnd

Func _MyWrite()
$one = GUICtrlRead($dogovor_one)
$two = GUICtrlRead($dogovor_two)
If $one = "" Then
   If $two = "" Then 
	  MsgBox(0, "", "Вы не заполнили Договоры 1 и 2")
   Else 
	  MsgBox(0, "", "Вы не заполнили Договор 1")
   EndIf
   Return
ElseIf $two = "" Then
    MsgBox(0, "", "Вы не заполнили Договор 2")
    Return
EndIf
MsgBox(0,'','$one = ' & $one & @LF & '$two = ' & $two  )
; дальнейший код. (RunWait(@Comsp ...))
EndFunc
 

Guezt

Продвинутый
Сообщения
335
Репутация
82
охо, сколько ответили, depodimon
твоя ошибка в том что ты пишешь
Код:
$dogovorone
и
Код:
$dogovortwo
в командную строку, хотя у тебя это элементы ( вернее инпутбоксы твоего окна ) , но никак не их значения, может в этом ошибка ? в любом случае глянь:
Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$Form1 = GUICreate("", 289, 98, 301, 310)
$dogovor_one = GUICtrlCreateInput("", 16, 24, 121, 21, BitOR($ES_AUTOHSCROLL,$ES_NUMBER,$WS_TABSTOP,$WS_VISIBLE,$WS_CHILD))
GUICtrlSetLimit(-1, 3)
$dogovor_two = GUICtrlCreateInput("", 152, 24, 121, 21, BitOR($ES_AUTOHSCROLL,$ES_NUMBER,$WS_TABSTOP,$WS_VISIBLE,$WS_CHILD))
GUICtrlSetLimit(-1, 3)
$OK = GUICtrlCreateButton("Прописать", 152, 56, 123, 25)
$Label1 = GUICtrlCreateLabel("Введите ваш номер договора:", 18, 0, 157, 19)
GUISetState(@SW_SHOW)


While 1
 $nMsg = GUIGetMsg()
 Switch $nMsg

  Case $GUI_EVENT_CLOSE
     Exit
  Case $OK
	 _CheckDogovor()
  EndSwitch
WEnd

Func _CheckDogovor()
  $check_ONE = GUICtrlRead($dogovor_one)
  $check_TWO = GUICtrlRead($dogovor_two)

 If StringLen($check_ONE)+StringLen($check_TWO) <> 6 Then
	  MsgBox(8208,"","Неверный номер Договора!")
 Else
	RunWait(@Comspec & ' /c route -p add 192.168.0.0 mask 255.255.0.0 192.168.' & $check_ONE & '.' & $check_TWO & ' metric 1',"",@SW_HIDE) ; тут проставляем метрику именно значений инпутбоксов 
	Exit ; если надо выйти после этого из скрипта, если нет закоментировать
 EndIf
EndFunc
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Guezt [?]
хотя у тебя это элементы ( вернее инпутбоксы твоего окна ) , но никак не их значения, может в этом ошибка ?

Конечно скорее всего так.
Это :
Код:
If StringLen($check_ONE)+StringLen($check_TWO) <> 6 Then

не верно.
автором задано условие :

depodimon [?]
в первом поле не больше 3 символов и во втором!
 

Guezt

Продвинутый
Сообщения
335
Репутация
82
gregaz
и чем извиняюсь не верно ?!
Код:
If StringLen($check_ONE)+StringLen($check_TWO) <> 6 Then

читаем код внимательнее, больше 3-х символов нельзя записать в каждый импут, то есть суммарно 6 цифр на два импутбокса.
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Guezt [?]
читаем код внимательнее, больше 3-х символов нельзя записать в каждый импут,

Но ведь допустимо и по одному . Зачем здесь фиксация ошибки
 

Guezt

Продвинутый
Сообщения
335
Репутация
82
OffTopic:
Кстати не все программы понимают значение 192.198.1.1 некоторым явно надо указывать адрес в таком виде 192.168.001.001 ... да и что это за договор который нумеруется не от 001 001 а так 1 1 ?! потом черт ногу сломит если так делать ИМХО
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
OffTopic:
Я не принимал во внимание что он делает в RunWait ...
Тогда согласен с
Код:
If StringLen($check_ONE)+StringLen($check_TWO) <  6 Then
т.к. > 6 он не может быть из-за уже установленного лимита

 
Верх