Что нового

Помогите доработать в GUI ввод числа в заданном диапазоне.

rafzak

Новичок
Сообщения
27
Репутация
1
Здравствуйте,
Уважаемые форумчане, Всех с Наступающим!
Помогите допилить скрипт:


Код:
#include <GuiConstantsEx.au3>
#include <AVIConstants.au3>
#include <TreeViewConstants.au3>

; GUI
GUICreate("IP адрес", 215, 80)

; UPDOWN
GUICtrlCreateLabel("Введите IP адрес:", 60, 15)
GUICtrlCreateLabel("192.168.0.", 70, 35)
GUICtrlCreateInput("60", 105, 32, 40, 20)
GUICtrlCreateUpdown(-1)

; GUI MESSAGE LOOP
GUISetState(@SW_SHOW)
While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit

	EndSwitch
WEnd


Нужно:
чтобы ввод последней цифры IP был в диапазоне от 60 до 63
кнопка "ОК"
присвоение переменной адреса 192.168.0.(60-63)
вывод её на экран
выход из проги

Спасибо
 

InnI

AutoIT Гуру
Сообщения
4,950
Репутация
1,444
Код:
#include <GuiConstantsEx.au3>
#include <AVIConstants.au3>
#include <TreeViewConstants.au3>

; GUI
GUICreate("IP адрес", 215, 80)

; UPDOWN
GUICtrlCreateLabel("Введите IP адрес:", 60, 15)
GUICtrlCreateLabel("192.168.0.", 70, 35)
$inp = GUICtrlCreateInput("60", 125, 32, 40, 20, 0x0800) ; $ES_READONLY
GUICtrlCreateUpdown(-1)
GUICtrlSetLimit(-1, 63, 60)
$but = GUICtrlCreateButton("OK", 100, 50)

; GUI MESSAGE LOOP
GUISetState(@SW_SHOW)
While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
        Case $but
            $IP = "192.168.0." & GUICtrlRead($inp)
            MsgBox(0, "IP", $IP)
    EndSwitch
WEnd
 

beliy

Продвинутый
Сообщения
372
Репутация
72
Для такого малого диапазона рационально было бы делать через

Код:
GUICtrlCreateCombo


Пример:
Код:
#include <GUIConstantsEx.au3>
#include <ComboConstants.au3>
#include <WindowsConstants.au3>

Local $msg, $Combo1
$hGUI = GUICreate("IP адрес", 215, 80) 
GUICtrlCreateLabel("Введите IP адрес:", 60, 15)
$Combo1 = GUICtrlCreateCombo("", 10, 40, 200, 23, $CBS_DROPDOWNLIST + $WS_VSCROLL) ; стиль не редактируемого списка
GUICtrlSetData(-1, "выберите IP|192.168.10.60|192.168.10.61|192.168.10.62|192.168.10.63", "выберите IP")

GUISetState() ; показывает созданное окно

; Запускается цикл опроса GUI до тех пор пока окно не будет закрыто
While 1
    $msg = GUIGetMsg()
    Switch $msg
        Case $GUI_EVENT_CLOSE
            ExitLoop
		 Case $Combo1
			If Not (GUICtrlRead($Combo1) == "выберите IP") Then
			   MsgBox(4096, 'IP адресс', 'Вы выбрали: "' & GUICtrlRead($Combo1) & '"', 0, $hGUI)
			Endif
    EndSwitch
WEnd
 

InnI

AutoIT Гуру
Сообщения
4,950
Репутация
1,444
OffTopic:
beliy [?]
Для такого малого диапазона рационально было бы делать
Ну, это спорный вопрос. Вот вариант.
Код:
#include <GuiConstantsEx.au3>

Dim $radio[4]
GUICreate("IP адрес", 220, 150)

GUICtrlCreateGroup("Выберите IP адрес", 10, 10, 200, 130)
$radio[0] = GUICtrlCreateRadio("192.168.0.60",  20, 40)
$radio[1] = GUICtrlCreateRadio("192.168.0.61", 120, 40)
$radio[2] = GUICtrlCreateRadio("192.168.0.62",  20, 60)
$radio[3] = GUICtrlCreateRadio("192.168.0.63", 120, 60)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUICtrlSetState($radio[0], $GUI_CHECKED)
$but = GUICtrlCreateButton("OK", 80, 90, 60, 30)
GUISetState()

While 1
  Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
      Exit
    Case $but
      For $i = 0 To 3
        If BitAND(GUICtrlRead($radio[$i]), $GUI_CHECKED) Then
          $IP = GUICtrlRead($radio[$i], 1)
          MsgBox(0, "IP", $IP)
          ExitLoop
        EndIf
      Next
  EndSwitch
WEnd
 

AZJIO

Меценат
Меценат
Сообщения
2,892
Репутация
1,196
Код:
#include <GuiConstantsEx.au3>
#include <GuiIPAddress.au3>
#include <WindowsConstants.au3>

Global $hIPAddress, $hgui

$hgui = GUICreate("Пример создания IP Address", 400, 300)
$hIPAddress = _GUICtrlIpAddress_Create($hgui, 10, 10)
_GUICtrlIpAddress_Set($hIPAddress, "192.168.0.60")
$iBtnUp = GUICtrlCreateButton('^', 140, 5, 18, 18)
$iBtnDown = GUICtrlCreateButton('v', 140, 22, 18, 18)
GUISetState()
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

While 1
	Switch GUIGetMsg()
		Case $iBtnUp
			_IncrementIP(True)
		Case $iBtnDown
			_IncrementIP(False)
		Case -3
			Send('{TAB}')
			MsgBox(0, 'Сообщение', _GUICtrlIpAddress_Get($hIPAddress))
			Exit
	EndSwitch
WEnd

Func _IncrementIP($inc)
	$aIP = _GUICtrlIpAddress_GetArray($hIPAddress)
	If ($aIP[3] <= 60 And Not $inc) Or ($aIP[3] >= 63 And $inc) Then Return
	If $inc Then
		$aIP[3] += 1
	Else
		$aIP[3] -= 1
	EndIf
	_GUICtrlIpAddress_SetArray($hIPAddress, $aIP)
EndFunc   ;==>_IncrementIP

Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
	Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR
	Local $tInfo

	$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
	$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
	$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
	$iCode = DllStructGetData($tNMHDR, "Code")
	Switch $hWndFrom
		Case $hIPAddress
			Switch $iCode
				Case $IPN_FIELDCHANGED
					$tInfo = DllStructCreate($tagNMIPADDRESS, $ilParam)
					If DllStructGetData($tInfo, "Field") = 3 Then
						If DllStructGetData($tInfo, "Value") > 63 Then
							DllStructSetData($tInfo, "Value", 63)
						ElseIf DllStructGetData($tInfo, "Value") < 60 Then
							DllStructSetData($tInfo, "Value", 60)
						EndIf
					EndIf
			EndSwitch
	EndSwitch
	Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY
 
Верх