Что нового

Объявление переменных

kyi

Новичок
Сообщения
43
Репутация
1
Добрый день!
Начал рассматривать создание окон и элементов. Удобно пользоваться для этого программой Koda
Koda, при создании кода почему то не объявляет переменные, вот, например
Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 623, 445, 399, 228)
$Button1 = GUICtrlCreateButton("Button1", 36, 40, 75, 25)
$Checkbox1 = GUICtrlCreateCheckbox("Checkbox1", 36, 84, 97, 17)
$Edit1 = GUICtrlCreateEdit("", 36, 124, 185, 89)
GUICtrlSetData(-1, "Edit1")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

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

   EndSwitch
WEnd


Исходя из этого мне, как новичку, очень сложно понять некоторые детали.
Везде пишут, что переменные надо объявлять заранее, это помогает в понимании кода и считается хорошим тоном. В общем получил я на выходе этот код и решил сам описать переменные.
Если с переменными
Код:
Local $Form1, $Button1, $Checkbox1, $Edit1

все ясно, я их объявляю локальными, то с переменными
Код:
$nMsg и $GUI_EVENT_CLOSE

мне не понятно, локальные они или глобальные
Про $GUI_EVENT_CLOSE в справке вообще пишут "Закрыть окно (либо по определённым кнопкам или системному меню)."
Не понимаю, как переменная может что то закрывать?
Если я правильно понимаю, то переменная это некий контейнер в который можно положить и можно взять от туда.
товарищи, объясните мне пожалуйста, что то у меня вообще взрыв мозга.
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
kyi, $nMsg в вашем случае глобальная, а $GUI_EVENT_CLOSE (прочитайте справку к GUIGetMsg) константа из #include <GUIConstantsEx.au3>
 
Автор
K

kyi

Новичок
Сообщения
43
Репутация
1
Спасибо за ответ, не ожидал так быстро.
Получается, $GUI_EVENT_CLOSE я должен объявить как константу?
Код:
$GUI_EVENT_CLOSE =

но константа это контейнер с заранее определенными данными, какие данные я должен определить для $GUI_EVENT_CLOSE?
И почему $nMsg это глобальная переменная?
Если я правильно понимаю, то потому, что эта переменная содержит значение опроса окна и должна быть доступна везде, верно?
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
Tempo [?]
константа из #include <GUIConstantsEx.au3>
kyi, нет объявлять не нужно читайте внимательней. Это вы должны решать нужна ли она вам в глобальной области видимости
 
Автор
K

kyi

Новичок
Сообщения
43
Репутация
1
kyi, нет объявлять не нужно читайте внимательней. Это вы должны решать нужна ли она вам в глобальной области видимости
Тогда опять мозг поплыл.
Можете на словах описать пару примеров что бы понимать как и в каких ситуациях я могу решать глобальная эта переменная ($nMsg) или локальная?
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
Если вы используете окна GUI как отдельные функции то используйте локальные переменные. Они видны лишь внутри функции и автоматически очищаются после её завершения
Код:
#include <GUIConstantsEx.au3>

MsgBox(0, "MsgBox", "_ExampleGUI: " & _ExampleGUI())
MsgBox(0, "MsgBox", "_ExampleGUI2: " & _ExampleGUI2())

Func _ExampleGUI()
	Local $iBtnOK, $iBtnCancel
	GUICreate("_ExampleGUI", 200, 50)
	$iBtnOK = GUICtrlCreateButton("OK", 15, 10, 80, 30)
	$iBtnCancel = GUICtrlCreateButton("Cancel", 105, 10, 80, 30)
	GUISetState()
	While 1
		Switch GUIGetMsg()
			Case $iBtnOK
				GUIDelete()
				Return "OK"
			Case $iBtnCancel
				GUIDelete()
				Return "Cancel"
			Case $GUI_EVENT_CLOSE
				GUIDelete()
				Return "Close"
		EndSwitch
	WEnd
EndFunc   ;==>_ExampleGUI

Func _ExampleGUI2()
	Local $iBtnOK, $iEdit, $iRet
	GUICreate("_ExampleGUI2", 200, 50)
	$iBtnOK = GUICtrlCreateButton("OK", 15, 10, 80, 30)
	$iEdit = GUICtrlCreateEdit("", 105, 15, 80, 20)
	GUISetState()
	While 1
		Switch GUIGetMsg()
			Case $iBtnOK
				$iRet = GUICtrlRead($iEdit)
				If $iRet Then
					GUIDelete()
					Return $iRet
				Else
					GUICtrlSetState($iEdit, $GUI_FOCUS)
				EndIf
			Case $GUI_EVENT_CLOSE
				GUIDelete()
				Return "Close"
		EndSwitch
	WEnd
EndFunc   ;==>_ExampleGUI2

В другом случае если вы не используете GUI как отдельную функцию и не боитесь нагромождения переменных можете использовать глобальные они будут всегда доступны из любого места скрипта. Так же при объявлении переменной в основном теле скрипта то разницы между Global/Local нет
Код:
#include <GUIConstantsEx.au3>

Global $iButton1, $iButton2, $iButton3, $iButton4

GUICreate("ExampleGUI", 200, 170)
$iButton1 = GUICtrlCreateButton("Button1", 10, 10, 180, 30)
$iButton2 = GUICtrlCreateButton("Button2", 10, 50, 180, 30)
$iButton3 = GUICtrlCreateButton("Button3", 10, 90, 180, 30)
$iButton4 = GUICtrlCreateButton("Button4", 10, 130, 180, 30)
GUISetState()

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit MsgBox(0, "", "$GUI_EVENT_CLOSE")
		Case $iButton1
			MsgBox(0, "", "$iButton1")
		Case $iButton2
			MsgBox(0, "", "$iButton2")
		Case $iButton3
			MsgBox(0, "", "$iButton3")
		Case $iButton4
			MsgBox(0, "", "$iButton4")
	EndSwitch
WEnd

По поводу констант посмотрите файл \AutoIt3\Include\GUIConstantsEx.au3 и прочитайте Магическое число (программирование) - Плохая практика программирования может это вам что-то объяснит
 
Верх