Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] При $GUI_EVENT_CLOSE окно зависает.

Ответить
Настройки темы
[решено] При $GUI_EVENT_CLOSE окно зависает.

Аватара для Centrinar

Старожил


Сообщения: 247
Благодарности: 1

Профиль | Цитировать


Вложения
Тип файла: zip tets.zip
(141.9 Kb, 7 просмотров)
Выкладываю образец скрипта, при нажатии на кнопку и закрытии окна виснут. А надо что бы при закрытии второго окна первое оставалось. СПАСИБО

Отправлено: 22:48, 03-03-2011

 

Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Нужно обрабатывать события для всех элементов в одном цикле, а GUI создавать например через функцию:

Код: Выделить весь код
#include <GUIConstantsEx.au3>
#include <ComboConstants.au3>
#include <GUIListView.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>
#include <GuiMenu.au3>
#include <Misc.au3>
#include <WinAPIEx.au3>

OnAutoItExitRegister('_Del_BackUpIni')
_Singleton(@ScriptName)

Global $sData, $aSection_N, $iColumns, $iColumn_W = 100, $iLeft = 10, $iY_LV = 60, _
	$hListView, $iLast_LV_Index, $iLast_LV_SubIndex, $hMain_GUI, $hEditor, $fEdit = False, _
	$nInputEditor, $aRect, $sFile, $iCountRow, $aChangeSubMenu[1], $aOld[1], $aNew[1], _
	$fLV = False, $fCombo = False

Global $hIniEditor_GUI, $hEditor, $nComboSection, $nListView, $iW_LV, $iDelta, $nInputIni, $nButtonDefault, $nButtonSave, _
	$nSubMenuEdit, $nSubMenuDel, $nSubMenuDelAll, $nContextMenuN, $nSubMenuNF, $nSubMenuNE, _
	$nContextMenu, $nComboEditor, $hContextMenu, $nContextMenu

$hMain_GUI = GUICreate("My GUI Tab", 200, 200)
$Button = GUICtrlCreateButton("Кнопка", 30, 30, 100, 20)

GUISetState(@SW_SHOW, $hMain_GUI)

While 1
	$aMsg = GUIGetMsg(1)
	
	If $aMsg[0] = 0 Then
		ContinueLoop
	EndIf
	
	Switch $aMsg[1]
		Case $hIniEditor_GUI
			Switch $aMsg[0]
				Case $GUI_EVENT_CLOSE
					GUIDelete($hIniEditor_GUI)
					GUIDelete($hEditor)
				Case $nComboSection
					GUICtrlSetState($nListView, $GUI_FOCUS)
					_GUICtrlListView_DeleteAllItems($hListView)
					For $i = $iColumns - 1 To 0 Step -1
						_GUICtrlListView_DeleteColumn($hListView, 1)
					Next
					For $i = 1 To 5
						$aSection_N = _IniReadSectionMy($sFile, GUICtrlRead($nComboSection))
						$iColumns = @extended
						If Not @error Then ExitLoop
					Next
					If Not @error Then
						If ($iColumns + 1) * $iColumn_W <> $iW_LV Then
							$iW_LV = ($iColumns + 1) * $iColumn_W
							If $iW_LV + $iLeft * 2 + $iDelta < 400 Then
								$iW_LV = 400 - $iLeft * 2
							EndIf
							WinMove($hMain_GUI, '', (@DesktopWidth - ($iW_LV + $iLeft * 2 + $iDelta)) / 2, _
									(@DesktopHeight - 400) / 2, $iW_LV + $iLeft * 2 + $iDelta * ($iColumns + 2))

							GUICtrlSetPos($nInputIni, $iLeft, 5, $iW_LV + $iDelta * ($iColumns + 1))
							GUICtrlSetPos($nListView, $iLeft, $iY_LV, $iW_LV + $iDelta * ($iColumns + 1))
						EndIf
						For $i = 1 To $iColumns
							_GUICtrlListView_AddColumn($hListView, 'Значение ' & $i, $iColumn_W, 2)
						Next
						_GUICtrlListView_AddArray($hListView, $aSection_N)
						$aSection_N = ''
						_SubMenuChange()
					Else
						MsgBox(16, 'Error', 'Произошла ошибка. Попробуйте еще раз.')
					EndIf
				Case $nButtonDefault
					$sFileDefault = @ScriptDir & '\BackUpIni\' & _
						StringRegExpReplace(GUICtrlRead($nInputIni), '^.*\\', '')
					_GUICtrlListView_DeleteAllItems($hListView)
					For $i = $iColumns - 1 To 0 Step -1
						_GUICtrlListView_DeleteColumn($hListView, 1)
					Next
					For $i = 1 To 5
						$aSection_N = _IniReadSectionMy($sFileDefault, GUICtrlRead($nComboSection))
						$iColumns = @extended
						If Not @error Then ExitLoop
					Next
					If Not @error Then
						If ($iColumns + 1) * $iColumn_W <> $iW_LV Then
							$iW_LV = ($iColumns + 1) * $iColumn_W
							If $iW_LV + $iLeft * 2 + $iDelta < 400 Then
								$iW_LV = 400 - $iLeft * 2
							EndIf
							WinMove($hMain_GUI, '', (@DesktopWidth - ($iW_LV + $iLeft * 2 + $iDelta)) / 2, _
									(@DesktopHeight - 400) / 2, $iW_LV + $iLeft * 2 + $iDelta * 2)

							GUICtrlSetPos($nInputIni, $iLeft, 5, $iW_LV + $iDelta)
							GUICtrlSetPos($nListView, $iLeft, $iY_LV, $iW_LV + $iDelta)
						EndIf
						For $i = 1 To $iColumns
							_GUICtrlListView_AddColumn($hListView, 'Значение ' & $i, $iColumn_W, 2)
						Next
						_GUICtrlListView_AddArray($hListView, $aSection_N)
						$aSection_N = ''
						_SubMenuChange()
					Else
						MsgBox(16, 'Error', 'Произошла ошибка. Попробуйте еще раз.')
					EndIf
					GUICtrlSetState($nListView, $GUI_FOCUS)
				Case $nButtonSave
					$iLV = _GUICtrlListView_GetItemCount($hListView)
					If $iLV Then
						$sSectionSave = GUICtrlRead($nComboSection)
						$sFileSave = GUICtrlRead($nInputIni)
						IniDelete($sFileSave, $sSectionSave)
						For $i = 0 To $iLV - 1
							$sValue = ''
							$sKeySave = _GUICtrlListView_GetItemText($hListView, $i)
							For $j = 1 To $iColumns
								$sTempSave = _GUICtrlListView_GetItemText($hListView, $i, $j)
								If $sTempSave Then
									$sValue &= '<' & $sTempSave & '>'
								Else
									$sValue &= '<Здесь не знаю, что надо>'
								EndIf
							Next
							IniWrite($sFileSave, $sSectionSave, $sKeySave, $sValue)
						Next
					EndIf
					GUICtrlSetState($nListView, $GUI_FOCUS)
					$iLV = 0
					$sSectionSave = ''
					$sFileSave = ''
					$sValue = ''
					$sKeySave = ''
					$sTempSave = ''
				Case $nSubMenuEdit
					_Editor_LV_Show()
				Case $nSubMenuDel
					_GUICtrlListView_SetItemText($hListView, $iLast_LV_Index, '', $iLast_LV_SubIndex)
					_SubMenuChange()
				Case $nSubMenuDelAll
					_GUICtrlListView_DeleteItem($hListView, $iLast_LV_Index)
					_SubMenuChange()
				Case $nListView
					If GUICtrlGetState($nListView) = 0 Then
						ShowMenu($hMain_GUI, $nContextMenuN, $hListView, 1)
					EndIf
				Case $nSubMenuNF
					$iLV = _GUICtrlListView_GetItemCount($hListView)
					If $iLV Then
						For $i = 0 To $iLV - 1
							$sOld = _GUICtrlListView_GetItemText($hListView, $i)
							$sNew = $i + 1 & StringRegExpReplace($sOld, '[0-9]', '')
							_GUICtrlListView_SetItemText($hListView, $i, $sNew)
						Next
					EndIf
					$iLV = 0
				Case $nSubMenuNE
					$iLV = _GUICtrlListView_GetItemCount($hListView)
					If $iLV Then
						For $i = 0 To $iLV - 1
							$sOld = _GUICtrlListView_GetItemText($hListView, $i)
							$sNew = StringRegExpReplace($sOld, '[0-9]', '') & $i + 1
							_GUICtrlListView_SetItemText($hListView, $i, $sNew)
						Next
					EndIf
					$iLV = 0
				Case Else
					$iCountRow = _GUICtrlListView_GetItemCount($hListView) - 1
					
					For $i = 0 To $iCountRow
						If $aMsg[0] = $aChangeSubMenu[$i] Then
							ReDim $aOld[$iColumns + 1]
							For $j = 1 To $iColumns
								$aOld[$j] = _GUICtrlListView_GetItemText($hListView, $iLast_LV_Index, $j)
							Next
							ReDim $aNew[$iColumns + 1]
							For $j = 1 To $iColumns
								$aNew[$j] = _GUICtrlListView_GetItemText($hListView, $i, $j)
							Next
							For $j = 1 To $iColumns
								_GUICtrlListView_SetItemText($hListView, $i, $aOld[$j], $j)
							Next
							For $j = 1 To $iColumns
								_GUICtrlListView_SetItemText($hListView, $iLast_LV_Index, $aNew[$j], $j)
							Next
							_SubMenuChange()
						Else
							ContinueLoop
						EndIf
					Next
			EndSwitch
		Case $hMain_GUI
			Switch $aMsg[0]
				Case $GUI_EVENT_CLOSE
					Exit
				Case $Button
					If Not @Compiled Then
						$sFile = @ScriptDir & '\conf.ini'
						If Not FileExists($sFile) Then
							MsgBox(16, 'Error', 'Отсутствует файл ' & $sFile)
							Exit
						EndIf
					Else
						If Not $CmdLine[0] Then
							MsgBox(16, 'Error', 'Для запуска перетащите' & @CRLF & 'ини-файл на иконку утилиты')
							Exit
						Else
							$sFile = $CmdLine[1]
						EndIf
					EndIf

					If StringRight($sFile, 4) <> '.ini' Then
						MsgBox(16, 'Error', 'Это не ини-файл.')
						Exit
					EndIf

					$iDelta = _WinAPI_GetSystemMetrics(33)

					For $i = 1 To 5
						$aSectionsAll = IniReadSectionNames($sFile)
						If Not @error Then ExitLoop
					Next
					If @error Then
						MsgBox(16, 'Error', 'Произошла ошибка. Попробуйте еще раз.')
						Exit
					EndIf

					For $i = 1 To $aSectionsAll[0]
						$sData &= $aSectionsAll[$i] & '|'
					Next
					$sData = StringTrimRight($sData, 1)

					For $i = 1 To 5
						$aSection_N = _IniReadSectionMy($sFile, $aSectionsAll[$aSectionsAll[0]])
						$iColumns = @extended
						If Not @error Then ExitLoop
					Next
					If @error Then
						MsgBox(16, 'Error', 'Произошла ошибка. Попробуйте еще раз.')
						Exit
					EndIf

					FileCopy($sFile, @ScriptDir & '\BackUpIni\' & StringRegExpReplace($sFile, '^.*\\', ''), 9)

					$iW_LV = ($iColumns + 1) * $iColumn_W
					If $iW_LV + $iLeft * 2 + $iDelta < 400 Then
						$iW_LV = 400 - $iLeft * 2 - $iDelta
					EndIf
					
					_IniEditor_Create()
			EndSwitch
	EndSwitch
WEnd

Func _IniEditor_Create()
	If $hIniEditor_GUI And WinExists($hIniEditor_GUI) Then Return
	
	$hIniEditor_GUI = GUICreate('Редактор ini-файлов', $iW_LV + $iLeft * 2 + $iDelta, 400, _
		(@DesktopWidth - ($iW_LV + $iLeft * 2 + $iDelta)) / 2, (@DesktopHeight - 400) / 2)
	GUICtrlCreatePic(@ScriptDir & "\images\001.jpg", 0, 0, (@DesktopWidth - ($iW_LV + $iLeft * 2 + $iDelta)), (@DesktopHeight - 400), $WS_CLIPSIBLINGS)
	
	;GUISetBkColor(0x00FFFF)
	
	$nInputIni = GUICtrlCreateInput($sFile, $iLeft, 5, $iW_LV + $iDelta, 20, _
		BitOR($GUI_SS_DEFAULT_INPUT, $ES_LEFT, $ES_READONLY))
	GUICtrlSetBkColor(-1, 0xF5F5DC)
	$nComboSection = GUICtrlCreateCombo('', $iLeft, 33, 100, 20, _
		BitOR($GUI_SS_DEFAULT_COMBO, $CBS_SIMPLE, $ES_READONLY))
	GUICtrlSetData(-1, $sData, $aSectionsAll[$aSectionsAll[0]])
	GUICtrlSetBkColor(-1, 0xF5F5DC)
	GUICtrlSetResizing($nComboSection, $GUI_DOCKLEFT + $GUI_DOCKSIZE)
	$sData = ''
	$aSectionsAll = ''

	$nButtonSave = GUICtrlCreateButton('Сохранить', 120, 32, 60, 22)
	GUICtrlSetResizing($nButtonSave, $GUI_DOCKLEFT + $GUI_DOCKSIZE)
	$nButtonDefault = GUICtrlCreateButton('Отменить', 190, 32, 60, 22)
	GUICtrlSetResizing($nButtonDefault, $GUI_DOCKLEFT + $GUI_DOCKSIZE)

	$nListView = GUICtrlCreateListView('', $iLeft, $iY_LV, $iW_LV + $iDelta, 330, _
		$LVS_REPORT, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
	GUICtrlSetBkColor(-1, 0xF5F5DC)
	$hListView = GUICtrlGetHandle($nListView)
	_GUICtrlListView_AddColumn($hListView, '1', $iColumn_W, 2)
	_GUICtrlListView_AddColumn($hListView, '1', $iColumn_W, 2)
	_GUICtrlListView_AddColumn($hListView, '1', $iColumn_W, 2)
	_GUICtrlListView_AddColumn($hListView, '1', $iColumn_W, 2)
	_GUICtrlListView_AddColumn($hListView, '1', $iColumn_W, 2)
	_GUICtrlListView_AddColumn($hListView, '1', $iColumn_W, 2)
	_GUICtrlListView_AddColumn($hListView, '1', $iColumn_W, 2)
	_GUICtrlListView_AddColumn($hListView, '1', $iColumn_W, 2)
	_GUICtrlListView_AddColumn($hListView, '1', $iColumn_W, 2)
	;For $i = 1 To $iColumns
	;	_GUICtrlListView_AddColumn($hListView, 'Значение ' & $i, $iColumn_W, 2)
	;Next
	_GUICtrlListView_AddArray($hListView, $aSection_N)
	$aSection_N = ''

	GUICtrlSetState($nListView, $GUI_FOCUS)
	$nDummyMenu = GUICtrlCreateDummy()
	$nContextMenu = GUICtrlCreateContextMenu($nDummyMenu)
	$hContextMenu = GUICtrlGetHandle($nContextMenu)
	$nSubMenuDel = GUICtrlCreateMenuItem('Удалить значение', $nContextMenu)
	$nSubMenuDelAll = GUICtrlCreateMenuItem('Удалить строку', $nContextMenu)
	$nSubMenuEdit = GUICtrlCreateMenuItem('Редактировать значение', $nContextMenu)

	_SubMenuChange(0)

	$nDummyMenuN = GUICtrlCreateDummy()
	$nContextMenuN = GUICtrlCreateContextMenu($nDummyMenuN)
	$hContextMenuN = GUICtrlGetHandle($nContextMenuN)
	$nSubMenuN = GUICtrlCreateMenu('Пронумеровать ключи', $nContextMenuN)
	$nSubMenuNF = GUICtrlCreateMenuItem('Число в начале', $nSubMenuN)
	$nSubMenuNE = GUICtrlCreateMenuItem('Число в конце', $nSubMenuN)

	$hEditor = GUICreate('Редактировать', $iColumn_W, 14, 110, 100, $WS_POPUP, _
		BitOR($WS_EX_TOOLWINDOW, $WS_EX_TOPMOST, $WS_EX_COMPOSITED))
	$nInputEditor = GUICtrlCreateInput('', 0, 0, $iColumn_W, 14);, $ES_CENTER)
	GUICtrlSetBkColor(-1, 0xDCDCDC)
	GUICtrlSetState(-1, $GUI_HIDE)

	$nComboEditor = GUICtrlCreateCombo('', 0, 0, $iColumn_W, 14)
	GUICtrlSetBkColor(-1, 0xDCDCDC)
	GUICtrlSetState(-1, $GUI_HIDE)

	_WinAPI_SetParent($hEditor, $hIniEditor_GUI)

	GUISetState(@SW_SHOW, $hIniEditor_GUI)
	GUIRegisterMsg($WM_NOTIFY, 'WM_NOTIFY')

	;_WinAPI_EmptyWorkingSet()
EndFunc

Func ShowMenu($hWnd, $nContextID, $nContextControlID, $iMouse = 0)
	Local $hMenu = GUICtrlGetHandle($nContextID)
	Local $iCtrlPos = ControlGetPos($hWnd, '', $nContextControlID)
	Local $X = $iCtrlPos[0]
	Local $Y = $iCtrlPos[1] + $iCtrlPos[3]
	ClientToScreen($hWnd, $X, $Y)
	If $iMouse Then
		$X = MouseGetPos(0)
		$Y = MouseGetPos(1)
	EndIf
	DllCall('user32.dll', 'int', 'TrackPopupMenuEx', 'hwnd', $hMenu, 'int', 0, 'int', _
			$X, 'int', $Y, 'hwnd', $hWnd, 'ptr', 0)
EndFunc   ;==>ShowMenu

Func ClientToScreen($hWnd, ByRef $X, ByRef $Y)
	Local $stPoint = DllStructCreate('int;int')

	DllStructSetData($stPoint, 1, $X)
	DllStructSetData($stPoint, 2, $Y)
	DllCall('user32.dll', 'int', 'ClientToScreen', 'hwnd', $hWnd, 'ptr', _
			DllStructGetPtr($stPoint))
	$X = DllStructGetData($stPoint, 1)
	$Y = DllStructGetData($stPoint, 2)
	$stPoint = 0
EndFunc   ;==>ClientToScreen

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

	$hWndListView = $hListView
	If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)

	$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
	$hWndFrom = HWnd(DllStructGetData($tNMHDR, 'hWndFrom'))
	$iCode = DllStructGetData($tNMHDR, 'Code')

	Switch $hWndFrom
		Case $hWndListView
			Switch $iCode
				Case $NM_RCLICK
					If $fEdit Then
						_Editor_LV_Save()
					EndIf
					$tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
					$iIndexItem = DllStructGetData($tInfo, 'Index')
					$iIndexSubItem = DllStructGetData($tInfo, 'SubItem')
					If $iIndexSubItem <> -1 Then
						$iLast_LV_SubIndex = $iIndexSubItem
					EndIf
					If $iIndexItem <> -1 Then
						$iLast_LV_Index = $iIndexItem
						For $i = 0 To $iCountRow
							GUICtrlSetState($aChangeSubMenu[$i], $GUI_ENABLE)
						Next
						GUICtrlSetState($aChangeSubMenu[$iIndexItem], $GUI_DISABLE)
						ShowMenu($hWnd, $nContextMenu, $hListView, 1)
					EndIf
				Case $NM_DBLCLK
					$tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
					$iIndexItem = DllStructGetData($tInfo, 'Index')
					$iIndexSubItem = DllStructGetData($tInfo, 'SubItem')
					If $iIndexSubItem <> -1 Then
						$iLast_LV_SubIndex = $iIndexSubItem
					EndIf
					If $iIndexItem <> -1 Then
						$iLast_LV_Index = $iIndexItem
					EndIf
					If Not $fEdit Then
						_Editor_LV_Show()
					EndIf
				Case $NM_CLICK, $NM_KILLFOCUS, $LVN_COLUMNCLICK
					If $fEdit Then
						_Editor_LV_Save()
					EndIf
			EndSwitch
	EndSwitch
	Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY

Func _Editor_LV_Save()
	HotKeySet('{ENTER}')
	HotKeySet('{UP}')
	HotKeySet('{DOWN}')
	If Not $fCombo Then
		_GUICtrlListView_SetItemText($hListView, $iLast_LV_Index, GUICtrlRead($nInputEditor), _
				$iLast_LV_SubIndex)
		GUICtrlSetData($nInputEditor, '')
		GUISetState(@SW_HIDE, $hEditor)
		_SubMenuChange()
	Else
		Local $sFromComboEditor = GUICtrlRead($nComboEditor)
		If $sFromComboEditor Then
			_GUICtrlListView_SetItemText($hListView, $iLast_LV_Index, $sFromComboEditor, $iLast_LV_SubIndex)
		EndIf
		GUISetState(@SW_HIDE, $hEditor)
		GUICtrlSetData($nComboEditor, '')
	EndIf
	$aRect = ''
	$fEdit = False
EndFunc   ;==>_Editor_LV_Save

Func _Editor_LV_Show()
	$aRect = _GUICtrlListView_GetSubItemRect($hListView, $iLast_LV_Index, $iLast_LV_SubIndex)
	WinMove($hEditor, '', $aRect[0] + $iLeft + $iDelta, $aRect[1] + $iY_LV, $iColumn_W, _
			($aRect[3] - $aRect[1]) + $iDelta)
	;If $iLast_LV_SubIndex Then
		Switch $iLast_LV_SubIndex
			Case 4 ;первая колонка.
				GUICtrlSetPos($nComboEditor, 0, 0, $iColumn_W, ($aRect[3] - $aRect[1]) + $iDelta)
				GUICtrlSetData($nComboEditor, 'yes|no')
				GUICtrlSetState($nComboEditor, $GUI_SHOW)
				GUICtrlSetState($nInputEditor, $GUI_HIDE)
				GUISetState(@SW_SHOW, $hEditor)
				$fCombo = True
			Case 5 ;пятая колонка
				GUICtrlSetPos($nComboEditor, 0, 0, $iColumn_W, ($aRect[3] - $aRect[1]) + $iDelta)
				GUICtrlSetData($nComboEditor, 'yes|no')
				GUICtrlSetState($nComboEditor, $GUI_SHOW)
				GUICtrlSetState($nInputEditor, $GUI_HIDE)
				GUISetState(@SW_SHOW, $hEditor)
				$fCombo = True
			Case Else ;любая, кроме тех, которые указаны выше.
				GUICtrlSetPos($nInputEditor, 0, 0, $iColumn_W, ($aRect[3] - $aRect[1]) + $iDelta)
				$sText = _GUICtrlListView_GetItemText($hListView, $iLast_LV_Index, $iLast_LV_SubIndex)
				GUICtrlSetData($nInputEditor, $sText)
				GUICtrlSetState($nInputEditor, $GUI_SHOW)
				GUICtrlSetState($nComboEditor, $GUI_HIDE)
				GUISetState(@SW_SHOW, $hEditor)
				$fCombo = False
		EndSwitch
	;EndIf
	$fEdit = True
	HotKeySet('{ENTER}', '_Editor_LV_Save')
	HotKeySet('{UP}', '_Editor_LV_Save')
	HotKeySet('{DOWN}', '_Editor_LV_Save')
EndFunc   ;==>_Editor_LV_Show

Func _IniReadSectionMy($sFile_Ini, $sSection_Name)
	Local $aSection_Name_Temp, $aValue_Temp, $aReturn_Array[1][2], $iMax = 1

	If Not FileExists($sFile_Ini) Then Return SetError(1)
	$aSection_Name_Temp = IniReadSection($sFile_Ini, $sSection_Name)
	If @error Then Return SetError(1)
	ReDim $aReturn_Array[$aSection_Name_Temp[0][0]][$iMax + 1]
	For $i = 1 To $aSection_Name_Temp[0][0]
		If Not StringInStr($aSection_Name_Temp[$i][1], '<') Or Not _
				StringInStr($aSection_Name_Temp[$i][1], '>') Then
			MsgBox(16, 'Редактор ini-файлов', _
					'Данная утилита предназначена для редактирования только тех ини-файлов,' & _
					@CRLF & 'в котором все значения заключены в теги "<" и ">", например,' & _
					@CRLF & '<Значение 1><Значение 2><Значение 3>...<Значение N>')
			Exit
			;Return SetError(1)
		EndIf
		$aValue_Temp = StringRegExp($aSection_Name_Temp[$i][1], '<(.*?)>', 3)
		If @error Then Return SetError(1)
		If $iMax < UBound($aValue_Temp) Then
			$iMax = UBound($aValue_Temp)
			ReDim $aReturn_Array[$aSection_Name_Temp[0][0]][$iMax + 1]
		EndIf
		$aReturn_Array[$i - 1][0] = $aSection_Name_Temp[$i][0]
		For $j = 0 To UBound($aValue_Temp) - 1
			$aReturn_Array[$i - 1][$j + 1] = $aValue_Temp[$j]
		Next
	Next
	Return SetError(0, $iMax, $aReturn_Array)
EndFunc   ;==>_IniReadSectionMy

Func _SubMenuChange($iFlag = 1)
	If $iFlag Then
		_GUICtrlMenu_DeleteMenu($hContextMenu, 3)
	EndIf
	$nSubMenuChange = GUICtrlCreateMenu('Поменять значение местами с', $nContextMenu)
	$iCountRow = _GUICtrlListView_GetItemCount($hListView) - 1
	ReDim $aChangeSubMenu[$iCountRow + 1]
	For $i = 0 To $iCountRow
		$sChangeSubMenu = ''
		If $iColumns > 1 Then
			For $j = 1 To 2
				$sChangeSubMenu &= _GUICtrlListView_GetItemText($hListView, $i, $j) & Chr(32)
			Next
			$sChangeSubMenu &= '...'
		Else
			$sChangeSubMenu = _GUICtrlListView_GetItemText($hListView, $i, 1) & Chr(32) & '...'
		EndIf
		$aChangeSubMenu[$i] = GUICtrlCreateMenuItem($sChangeSubMenu, $nSubMenuChange)
	Next
EndFunc   ;==>_SubMenuChange

Func _Del_BackUpIni()
	DirRemove(@ScriptDir & '\BackUpIni', 1)
EndFunc   ;==>_Del_BackUpIni

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 23:21, 03-03-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Centrinar

Старожил


Сообщения: 247
Благодарности: 1

Профиль | Цитировать


Можно как нибудь в кратце описать как это делается, т.е. как правильно назначаються $aMsg[...] , какие Global прописываем и т.д. А то я пока читал этот скрипт аж голова закружилась

Отправлено: 00:18, 05-03-2011 | #3


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата Centrinar:
Можно как нибудь в кратце описать как это делается »
Вкратце - нет. Читай справку и смотри примеры в ней.
Всё что могу сделать, так это привести ещё один простой пример обработки событий от двух GUI:

Код: Выделить весь код
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

#Region Main form
$hMain_GUI = GUICreate("Главное окно", 300, 200)
$nStngs_Btn = GUICtrlCreateButton("Настройки", 10, 170, 70, 20)
$nExit_Btn = GUICtrlCreateButton("Выход", 90, 170, 70, 20)
GUISetState(@SW_SHOW, $hMain_GUI)
#EndRegion Main form

#Region Settings form
$hStngs_GUI = GUICreate("Настройки", 400, 200)
$nStngs_Ok_Btn = GUICtrlCreateButton("ОК", 10, 170, 80, 25)
$nStngs_Close_Btn = GUICtrlCreateButton("Закрыть", 310, 170, 80, 25)
#EndRegion Settings form

While 1
    $aMsg = GUIGetMsg(1) ;Расширенная обработка событий

    Switch $aMsg[0]
        Case $GUI_EVENT_CLOSE, $nExit_Btn, $nStngs_Close_Btn
            Switch $aMsg[1]
                Case $hMain_GUI  ;Событие поступило от главного окна - завершаем работу скрипта
                    Exit
                Case $hStngs_GUI ;Событие поступило от окна настроек - закрываем его
                    GUISetState(@SW_HIDE, $hStngs_GUI)
            EndSwitch
        Case $nStngs_Btn
            GUISetState(@SW_SHOW, $hStngs_GUI)
    EndSwitch
WEnd

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 02:48, 05-03-2011 | #4


Аватара для Centrinar

Старожил


Сообщения: 247
Благодарности: 1

Профиль | Цитировать


Разобрался спасибо! А если у меня есть переменная:
Код: Выделить весь код
$hMain_GUI = GUICreate("Главное окно", 300, 200)
$nStngs_Btn = GUICtrlCreateButton("Настройки", 10, 170, 70, 20)
$nExit_Btn = GUICtrlCreateButton("Выход", 90, 170, 70, 20)
........
Local $Button[3]
$iLeft = 10
For $i=1 To $Perl
$Buttons[$i] = GUICtrlCreateButton ("Кнопка", $iLeft75102 , 10, 10, 20)
$iLeft += 10
Next
Как ее правильно внести?

Последний раз редактировалось Creat0R, 09-03-2011 в 19:20.


Отправлено: 03:02, 09-03-2011 | #5


Аватара для Centrinar

Старожил


Сообщения: 247
Благодарности: 1

Профиль | Цитировать



Отправлено: 13:00, 09-03-2011 | #6


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата Centrinar:
А если у меня есть переменная »
Ничего не понял, какая переменная, и как оно связано с данной темой?

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 19:20, 09-03-2011 | #7


Аватара для Centrinar

Старожил


Сообщения: 247
Благодарности: 1

Профиль | Цитировать


пардон...
Код: Выделить весь код
Local $Button[3]
$iLeft = 10
For $i=1 To $Perl
$Buttons[$i] = GUICtrlCreateButton ("Кнопка", $iLeft75102 , 10, 10, 20)
$iLeft += 10
создаються кнопки $Buttons[$i] как их в Casе правильно вписать?

Код: Выделить весь код
While 1
For  $i = 1 To UBound($Perl)-1

    $aMsg = GUIGetMsg(1) ;Расширенная обработка событий

    Switch $aMsg[0]
        Case $GUI_EVENT_CLOSE, $nExit_Btn, $nStngs_Close_Btn
            Switch $aMsg[1]
                Case $hMain_GUI  ;Событие поступило от главного окна - завершаем работу скрипта
                    Exit
                Case $hStngs_GUI ;Событие поступило от окна настроек - закрываем его
                    GUISetState(@SW_HIDE, $hStngs_GUI)
            EndSwitch
        Case $nStngs_Btn
            GUISetState(@SW_SHOW, $hStngs_GUI)
        Case $Button[$i]
     .........................................
......................................................
.........................................................
...........................................................
    EndSwitch
next
WEnd
Скрипт работает но кнопки нажимаются ток со второго раза

Отправлено: 00:18, 10-03-2011 | #8


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата Centrinar:
как их в Casе правильно вписать? »
Код: Выделить весь код
Case $Buttons[1] To $Buttons[2]

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 00:25, 10-03-2011 | #9


Аватара для Centrinar

Старожил


Сообщения: 247
Благодарности: 1

Профиль | Цитировать


а если мне число этих $Buttons[1] не известно их может быть и 7 и 8?

$Buttons[1] to $Buttons[$i]?

При этом у каждого $Buttons свое действие должно быть(((

Последний раз редактировалось Centrinar, 10-03-2011 в 00:38.


Отправлено: 00:31, 10-03-2011 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] При $GUI_EVENT_CLOSE окно зависает.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Как сделать чтобы дочернее окно при выходе не закрывало основное окно assch AutoIt 5 19-07-2010 02:11
Зависает окно MSRDP на ПК пользователей. WerDex Microsoft Windows NT/2000/2003 3 30-04-2010 13:17
[решено] зависает воостановление системы -белое окно illusionmgs Хочу все знать 1 18-04-2009 17:35
Комп намертво зависает при простое и при игре!!!! kish Непонятные проблемы с Железом 1 11-10-2008 08:21
Установка - при инсталяции Vista Business зависает при появлении ProgressBar. _ib_ Microsoft Windows Vista 5 18-09-2008 05:17




 
Переход