Что нового

Не получается создать 2 Tab Control в Koda Form Designer

Suppir

Продвинутый
Сообщения
967
Репутация
62
Один контрол создается, а два нет. Версия - последняя stable.


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

Нашел проблему - в описании AutoIt сказано:

ONLY one Tab control can be created by window. But a script can creates several windows having a tab in.

Т.е. в одном окне может быть только один Tab. Очень жаль :(
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Код:
#Include <GUIConstants.au3>
#Include <WindowsConstants.au3>

Global $main_GUI, $ok_button, $cancel_button

; This window has 2 ok/cancel-buttons
$main_GUI = GUICreate("TAB in TAB", 260, 250, -1, -1)
$ok_button = GUICtrlCreateButton("OK", 40, 220, 70, 20)
$cancel_button = GUICtrlCreateButton("Cancel", 150, 220, 70, 20)

; Create the first child window that is implemented into the main GUI
$child1 = GUICreate("", 230, 170, 15, 35, BitOR($WS_CHILD, $WS_TABSTOP), -1, $main_GUI)
$child_tab = GUICtrlCreateTab(10, 10, 210, 150)
$child11tab = GUICtrlCreateTabItem("1")
$child12tab = GUICtrlCreateTabItem("2")
GUICtrlCreateTabItem("")

GUISetState()

; Create the second child window that is implemented into the main GUI
$child2 = GUICreate("", 230, 170, 15, 35, BitOR($WS_CHILD, $WS_TABSTOP), -1, $main_GUI)
$listview2 = GUICtrlCreateListView("Col1|Col2", 10, 10, 210, 150, -1, $WS_EX_CLIENTEDGE)
GUICtrlCreateListViewItem("ItemLong1|ItemLong12", $listview2)
GUICtrlCreateListViewItem("ItemLong2|Item22", $listview2)

; Switch back the main GUI and create the tabs
GUISwitch($main_GUI)
$main_tab = GUICtrlCreateTab(10, 10, 240, 200)
$child1tab = GUICtrlCreateTabItem("Child1")
$child2tab = GUICtrlCreateTabItem("Child2")
GUICtrlCreateTabItem("")

GUISetState()

While 1
	$msg = GUIGetMsg(1)
	Switch $msg[0]
		Case $GUI_EVENT_CLOSE, $cancel_button
			ExitLoop

		Case $main_tab
			Switch GUICtrlRead($main_tab)
				Case 0
					GUISetState(@SW_HIDE, $child2)
					GUISetState(@SW_SHOW, $child1)

				Case 1
					GUISetState(@SW_HIDE, $child1)
					GUISetState(@SW_SHOW, $child2)
			EndSwitch
	EndSwitch
WEnd
 
Автор
S

Suppir

Продвинутый
Сообщения
967
Репутация
62
Yashied

В приведенном примере действительно 2 Tab Item, однако они в разных GUI. А мне нужно создать единый GUI, который будет разделен по вертикали. Слева будет один TabItem, справа - другой. Т.е. они будут видны одновременно.


Дополнительный вопрос:

Если я создал Tab Item и несколько TabSheets - каким образом можно программно переключить на определенный TabSheet?

Ответ на дополнительный вопрос

Нужно использовать
GUICtrlSetState($TabSheet2, $GUI_SHOW)
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Suppir [?]
В приведенном примере действительно 2 Tab Item, однако они в разных GUI
И что, так сильно мешает? ты пример запускал? :smile:

Код:
#Include <GUIConstants.au3>
#Include <WindowsConstants.au3>

; This window has 2 ok/cancel-buttons
$main_GUI = GUICreate("TAB in TAB", 400, 250, -1, -1)

$main_tab = GUICtrlCreateTab(10, 10, 180, 200)
$child1tab = GUICtrlCreateTabItem("Child1")
GUICtrlCreateLabel("Main Label", 20, 60, 70, 20)
$child2tab = GUICtrlCreateTabItem("Child2")
GUICtrlCreateButton("Main Button", 20, 60, 70, 20)
GUICtrlCreateTabItem("")

$ok_button = GUICtrlCreateButton("OK", 10, 220, 70, 20)
$cancel_button = GUICtrlCreateButton("Cancel", 90, 220, 70, 20)

; Create the first child window that is implemented into the main GUI
$child = GUICreate("", 210, 210, 190, 0, BitOR($WS_CHILD, $WS_TABSTOP), -1, $main_GUI)
$child_tab = GUICtrlCreateTab(10, 10, 190, 200)

$child11tab = GUICtrlCreateTabItem("1")
GUICtrlCreateLabel("Child Label", 20, 60, 70, 20)

$child12tab = GUICtrlCreateTabItem("2")
GUICtrlCreateButton("Child Button", 20, 60, 70, 20)
GUICtrlCreateTabItem("")

GUISetState(@SW_SHOW, $child)
GUISetState(@SW_SHOW, $main_GUI)

; Switch back the main GUI
GUISwitch($main_GUI)

While 1
    $nMsg = GUIGetMsg(1)
	
    Switch $nMsg[0]
        Case $GUI_EVENT_CLOSE, $cancel_button
            ExitLoop
    EndSwitch
WEnd
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
А можно в виде функций:

Код:
#Include <GUIConstants.au3>
#Include <WindowsConstants.au3>

$main_GUI = GUICreate("_GUICtrlCreateTabEx Demo", 400, 250, -1, -1)

$aTab1 = _GUICtrlCreateTabEx($main_GUI, 10, 10, 180, 200)

GUICtrlCreateTabItem("Tab1 Item1")
GUICtrlCreateLabel("Tab1 Label", 20, 60, 70, 20)
GUICtrlCreateTabItem("Tab1 Item2")
GUICtrlCreateButton("Tab1 Button", 20, 60, 70, 20)
GUICtrlCreateTabItem("")

$aTab2 = _GUICtrlCreateTabEx($main_GUI, 200, 10, 190, 200)

GUICtrlCreateTabItem("Tab2 Item1")
GUICtrlCreateLabel("Tab2 Label", 20, 60, 70, 20)
GUICtrlCreateTabItem("Tab2 Item2")
GUICtrlCreateButton("Tab2 Button", 20, 60, 70, 20)
GUICtrlCreateTabItem("")

GUISwitch($main_GUI)
$OK_Button = GUICtrlCreateButton("OK", 10, 220, 70, 20)
$Cancel_Button = GUICtrlCreateButton("Cancel", 90, 220, 70, 20)

_GUICtrlTabEx_Show($aTab1)
_GUICtrlTabEx_Show($aTab2)
GUISetState(@SW_SHOW, $main_GUI)

While 1
    $nMsg = GUIGetMsg(1)
	
    Switch $nMsg[0]
        Case $GUI_EVENT_CLOSE, $Cancel_Button
            ExitLoop
		Case $aTab1[1]
			ConsoleWrite("Tab 1, Item: " & GUICtrlRead($nMsg[0]) & @LF)
		Case $aTab2[1]
			ConsoleWrite("Tab 2, Item: " & GUICtrlRead($nMsg[0]) & @LF)
    EndSwitch
WEnd

Func _GUICtrlCreateTabEx($hWnd, $iX, $iY, $iWidth = 150, $iHeight = 150)
	Local $hTab, $nTab, $aRet
	
	$hTab = GUICreate("", $iWidth, $iHeight, $iX, $iY, BitOR($WS_CHILD, $WS_TABSTOP), -1, $hWnd)
	$nTab = GUICtrlCreateTab(0, 0, $iWidth, $iHeight)
	
	Dim $aRet[2] = [$hTab, $nTab]
	Return $aRet
EndFunc

Func _GUICtrlTabEx_Show($ahTab)
	If Not IsArray($ahTab) Or Not IsHWnd($ahTab[0]) Then
		Return SetError(1, 0, 0)
	EndIf
	
	GUISetState(@SW_SHOW, $ahTab[0])
EndFunc
 
  • Like
Реакции: Norm
Верх