Что нового

выполнении функции после переключении табы (TabItem)

running-frag

why me?
Сообщения
441
Репутация
60
Есть несколько табов.
Код:
$hCharTab[0]		= GUICtrlCreateTab	(5, 5, 490, 440, $TCS_BUTTONS)

$hCharTab[1]		= GUICtrlCreateTabItem	("List")
. . .						
$hCharTab[2]		= GUICtrlCreateTabItem	("Edit")
. . .
$hCharTab[3]		= GUICtrlCreateTabItem	("Type")

Есть главный цикл, который "вылавливает" действия из дочернего.
Код:
While True
	$hAction = GUIGetMsg (1)
	
	Select
		
		;; =================================================================================  CHILD WINDOWS
		Case $hAction[1] = $hGUI_child And Not ($hAction[0] = $GUI_EVENT_CLOSE)
			
			Switch (WinGetTitle ($hGUI_child))	; флажок окна
				Case "XXX"	; этом имя окна																
					If $hAction[0] = $hCharTab[0] Then Function1 () ; при любом переключении выполняем
					
				. . .
						
				EndSwitch
		;; =================================================================================  CHILD WINDOWS
	
			
		EndSelect
WEnd


Вопрос не сложный, но поставил меня в тупик, как можно реализовать что бы по вызову второй табы (Edit) запускалась функция Function1 () ?

На данный момент если писать $hCharTab[2] (вместо $hCharTab[0]), то ничего не происходит. Почему? Подскажите.


Добавлено:
Сообщение автоматически объединено:

Другими словами нужно "после каждого переключения на Edit табу, выполнят опред. функцию".
 

Ganibal95

GreenBytes
Сообщения
877
Репутация
240
так что ли:
Код:
#include <GUIConstantsEx.au3>
#include <TabConstants.au3>
#include <WindowsConstants.au3>
$Form1 = GUICreate("Form1", 403, 250, -1, -1)
$Tab1 = GUICtrlCreateTab(0, 0, 401, 249)
$TabSheet1 = GUICtrlCreateTabItem("TabSheet1")
$TabSheet2 = GUICtrlCreateTabItem("TabSheet2")
$TabSheet3 = GUICtrlCreateTabItem("TabSheet3")
GUICtrlCreateTabItem("")
GUISetState(@SW_SHOW)

Global $iTemp

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

	EndSwitch
	$iTab = GUICtrlRead($Tab1)
	if $iTab <> $iTemp Then
		Switch $iTab
			Case 0
				MsgBox(0,0,1)
			Case 1
				MsgBox(0,0,2)
			Case 2
				MsgBox(0,0,3)
		EndSwitch
		$iTemp = $iTab
	EndIf
WEnd
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
running-frag,
Так можно.
Код:
#include <GUIConstantsEx.au3>
#include <TabConstants.au3>

Global $hGui, $nTab, $aLabel[7], $iIndex, $nTabItem, $iOld, $fTab

$hGui = GUICreate('Test', 320, 260)
$nTab = GUICtrlCreateTab(10, 10, 300, 200)
For $i = 0 To UBound($aLabel) - 1
	GUICtrlCreateTabItem('Tab_' & $i + 1)
	If Not $i Then $nTabItem = GUICtrlRead($nTab, 1)
	If $i = 2 Then
		GUICtrlSetState(-1, $GUI_SHOW)
	EndIf
	$aLabel[$i] = GUICtrlCreateLabel('', 30, 50, 100, 20)
	GUICtrlSetBkColor(-1, 0xF0F0F0)
Next
GUICtrlCreateTabItem('')
$nButton = GUICtrlCreateButton('Click me', 110, 220, 100, 30)
GUISetState()

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
		Case $nTab
			$iIndex = GUICtrlSendMsg($nTab, $TCM_GETCURSEL, 0, 0)
			;$iIndex = GUICtrlRead($nTab);или так
			_FuncTab($iIndex)
		Case $nButton
			$fTab = Not $fTab
			If $fTab Then
				$iStart = 0
				$iEnd = (UBound($aLabel) - 1) * 2
				$iStep = 2
			Else
				$iStart = (UBound($aLabel) - 1) * 2
				$iEnd = 0
				$iStep = -2
			EndIf
			For $i = $iStart To $iEnd Step $iStep
				GUICtrlSetState($nTabItem + $i, $GUI_SHOW)
				_FuncTab($i / 2)
				Sleep(100)
			Next
	EndSwitch
WEnd

Func _FuncTab($i_Index)
	GUICtrlSetData($aLabel[$i_Index], 'Open tab: Tab_' & $i_Index + 1)
	Beep(300 + $i_Index * 100, 50)
	#cs
	Switch $i_Index
		Case 0
			;действие 1
		Case 1
			;действие 2
		Case 2
			;действие 3
		Case 3
			;действие 4
		Case 4
			;действие 5
		Case 5
			;действие 6
		Case 6
			;действие 7
	EndSwitch
	#ce
EndFunc   ;==>_FuncTab

Ganibal95,
А зачем постоянно проверять?
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
А ещё проще посмотреть пример в справке :smile:
Старался все встречающиеся проблемы решить в примерах справки, особенно это касается Gui.
 
Верх