|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] При $GUI_EVENT_CLOSE окно зависает. |
|
|
[решено] При $GUI_EVENT_CLOSE окно зависает.
|
Старожил Сообщения: 247 |
Выкладываю образец скрипта, при нажатии на кнопку и закрытии окна виснут. А надо что бы при закрытии второго окна первое оставалось. СПАСИБО
|
|
Отправлено: 22:48, 03-03-2011 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить 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 |
------- Отправлено: 23:21, 03-03-2011 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 247
|
Можно как нибудь в кратце описать как это делается, т.е. как правильно назначаються $aMsg[...] , какие Global прописываем и т.д. А то я пока читал этот скрипт аж голова закружилась
|
Отправлено: 00:18, 05-03-2011 | #3 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить 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 |
|
------- Отправлено: 02:48, 05-03-2011 | #4 |
Старожил Сообщения: 247
|
Разобрался спасибо! А если у меня есть переменная:
$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 |
Старожил Сообщения: 247
|
![]() |
Отправлено: 13:00, 09-03-2011 | #6 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Centrinar:
|
|
------- Отправлено: 19:20, 09-03-2011 | #7 |
Старожил Сообщения: 247
|
пардон...
Local $Button[3] $iLeft = 10 For $i=1 To $Perl $Buttons[$i] = GUICtrlCreateButton ("Кнопка", $iLeft75102 , 10, 10, 20) $iLeft += 10 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 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Centrinar:
|
|
------- Отправлено: 00:25, 10-03-2011 | #9 |
Старожил Сообщения: 247
|
а если мне число этих $Buttons[1] не известно их может быть и 7 и 8?
$Buttons[1] to $Buttons[$i]? При этом у каждого $Buttons свое действие должно быть((( |
Последний раз редактировалось Centrinar, 10-03-2011 в 00:38. Отправлено: 00:31, 10-03-2011 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
[решено] Как сделать чтобы дочернее окно при выходе не закрывало основное окно | 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 |
|