1 (изменено: belyankin12, 2017-05-07 12:21:05)

Тема: AHK: Несколько подвкладок в главной вкладке (GUI tab)

Здравствуйте, появилась необходимость создать в материнской вкладке несколько дочерних.  Например, у меня есть вот такая конфигурация:

Gui, Add, Tab, x2 y70 w810 h490 , Основные макросы|Основные макросы - 2|Пользовательский макрос|Пользовательский макрос - 2|Разное|Настройки

Нужно объединить основные макросы в одну вкладку и пользовательские макросы в одну. Места у меня нету, чтобы перенести содержимое этих вкладок в одну, потому нужно создать подвкладки. Можете мне помочь с этим?

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

2

Re: AHK: Несколько подвкладок в главной вкладке (GUI tab)

Эл. упр. Tab не может быть создан внутри другого Tab. На случай высокой степени вложенности придумали  ЭУ "TreeView".
Но можно имитировать Tab, создав несколько кнопок. Каждая кнопка скрывает ЭУ, связанные к соседним кнопкам, после чего отображает собственные ЭУ.

3

Re: AHK: Несколько подвкладок в главной вкладке (GUI tab)

Непосредственно создать один tab внутри другого нельзя, но скорее всего можно во вкладке создать дочернее GUI, и уже в нём создавать новый tab.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

4

Re: AHK: Несколько подвкладок в главной вкладке (GUI tab)

Меня устроит любой из ваших вариантов, главное чтобы дочернее GUI (в случае с вариантом teadrinker) отображалось одновременно с основным и соответственно переключались тоже легко (без всяких дополнительных закрытий и прочего). А насчёт варианта ypppu: я понял только частично ваш вариант, можете показать простейший пример?

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

5

Re: AHK: Несколько подвкладок в главной вкладке (GUI tab)

Gui, Add, Tab, w400 h400, Вкладка 1|Вкладка 2

Gui, Tab, 1 ; Добавленные элементы управления появятся на первой вкладке
Gui, Add, Button,  w100      g1-1, Вкладка 1-1
Gui, Add, Button,  w100 x+10 g1-2, Вкладка 1-2
Gui, Add, Edit  ,  w100 h200 xp-110 y+40 vMyEdit1, 1111111
Gui, Add, Edit  ,  w100 h200 xp yp       vMyEdit2, 2222222
GuiControl, Hide, MyEdit2

Gui, Tab, 2 ; Добавленные элементы управления появятся на второй вкладке
Gui, Add, Button,  w100      g2-1, Вкладка 2-1
Gui, Add, Button,  w100 x+10 g2-2, Вкладка 2-2
Gui, Add, Edit  ,  w100 h200 xp-110 y+40 vMyEdit3, 3333333
Gui, Add, Edit  ,  w100 h200 xp yp       vMyEdit4, 4444444
GuiControl, Hide, MyEdit4

GUI, Show
Return


1-1:
GuiControl, Show, MyEdit1
GuiControl, Hide, MyEdit2
Return

1-2:
GuiControl, Show, MyEdit2
GuiControl, Hide, MyEdit1
Return

2-1:
GuiControl, Hide, MyEdit4
GuiControl, Show, MyEdit3
Return

2-2:
GuiControl, Hide, MyEdit3
GuiControl, Show, MyEdit4
Return

6

Re: AHK: Несколько подвкладок в главной вкладке (GUI tab)

ypppu ух ты, выглядит шикарно. Спасибо!

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

7

Re: AHK: Несколько подвкладок в главной вкладке (GUI tab)

Tabs := {"основное":"Tab1","макросы":"Tab2"}
Color = 0xC2E2A7
Gui, +HWNDhGui -DPIScale
Gui, Color, %Color%
Gui, Add, Tab3, w300 h200 vTabMain gTabMain HWNDhTab, основное|макросы|другое 
Gui, Tab, 3
Gui, Add, Text, , другое

Gui, Tab1:Default
Gui, Color, %Color%
Gui, +Parent%hTab% -Caption -DPIScale
Gui, Add, Tab3, x0 y0 w200, основное 1|основное 2
Gui, Tab, 1
Gui, Add, Text, , основное 1 
Gui, Tab, 2
Gui, Add, Edit, , основное 2 

Gui, Tab2:Default
Gui, Color, %Color%
Gui, +Parent%hTab% -Caption -DPIScale
Gui, Add, Tab3, x0 y0 w200, макросы 1|макросы 2
Gui, Tab, 1
Gui, Add, Text, , макросы 1 
Gui, Tab, 2
Gui, Add, Edit, , макросы 2 

Gui, 1:Default
Gui, Show

TabMain: 
    GuiControlGet, TabMain
	for k, v in Tabs
		if (TabMain != k) 
			Gui, %v%:Show, Hide 
	if (Tabs[TabMain] != "")
		Gui, % Tabs[TabMain] ":Show", Na x1 y25
	else	
		GuiControl, MoveDraw, TabMain
    Return
По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.01 (Unicode 32-bit).

8

Re: AHK: Несколько подвкладок в главной вкладке (GUI tab)

teadrinker пишет:

но скорее всего можно во вкладке создать дочернее GUI,

Сделать дочерним вкладке таба, или самому табу?

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.01 (Unicode 32-bit).

9

Re: AHK: Несколько подвкладок в главной вкладке (GUI tab)

Сам себе отвечу, наверное так:

Color = 0xC2E2A7
w := 300, h := 200
Gui, -DPIScale
Gui, Color, %Color%
Gui, Add, Tab3, w%w% h%h%, основное|макросы|другое 
Gui, Tab, 1
Gui, Add, Text, HWNDhTab1 x10 y10 w%w% h%h%, % ""
Gui, Tab, 2
Gui, Add, Text, HWNDhTab2 x10 y10 w%w% h%h%, % ""
Gui, Tab, 3
Gui, Add, Text, , другое

Gui, Tab1:Default
Gui, Color, %Color%
Gui, +Parent%hTab1% -Caption -DPIScale
Gui, Add, Tab3, x0 y0 w%w% h%h%, основное 1|основное 2
Gui, Tab, 1
Gui, Add, Text, , основное 1 
Gui, Tab, 2
Gui, Add, Edit, , основное 2 
Gui, Show, Na x1 y25

Gui, Tab2:Default
Gui, Color, %Color%
Gui, +Parent%hTab2% -Caption -DPIScale
Gui, Add, Tab3, x0 y0 w%w% h%h%, макросы 1|макросы 2
Gui, Tab, 1
Gui, Add, Text, , макросы 1 
Gui, Tab, 2
Gui, Add, Edit, , макросы 2 
Gui, Show, Na x1 y25

Gui, 1:Default
Gui, Show 
Return
По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.01 (Unicode 32-bit).

10

Re: AHK: Несколько подвкладок в главной вкладке (GUI tab)

Хотя такая непонятка, если перейти по "макросы - макросы 3", то скрипт виснет. Так понял из за добавления Button...

Так что ТС пока могу посоветовать код из 7 поста.


Color = 0xC2E2A7
w := 300, h := 200
Gui, -DPIScale
Gui, Color, %Color%
Gui, Add, Tab3, w%w% h%h%, основное|макросы|другое 
Gui, Tab, 1
Gui, Add, Text, HWNDhTab1 x10 y10 w%w% h%h%, % ""
Gui, Tab, 2
Gui, Add, Text, HWNDhTab2 x10 y10 w%w% h%h%, % ""
Gui, Tab, 3
Gui, Add, Text, , другое

Gui, Tab1:Default
Gui, Color, %Color%
Gui, +Parent%hTab1% -Caption -DPIScale
Gui, Add, Tab3, x0 y0 w%w% h%h%, основное 1|основное 2
Gui, Tab, 1
Gui, Add, Edit, , основное 1
Gui, Tab, 2
Gui, Add, Text, , основное 2
Gui, Show, Na x1 y25

Gui, Tab2:Default
Gui, Color, %Color%
Gui, +Parent%hTab2% -Caption -DPIScale
Gui, Add, Tab3, x0 y0 w%w% h%h%, макросы 1|макросы 2|макросы 3
Gui, Tab, 1
Gui, Add, Text, , макросы 1 
Gui, Tab, 2
Gui, Add, Edit, , макросы 2 
Gui, Tab, 3
Gui, Add, Button, , макросы 3
Gui, Show, Na x1 y25

Gui, 1:Default
Gui, Show 
Return 
По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.01 (Unicode 32-bit).

11

Re: AHK: Несколько подвкладок в главной вкладке (GUI tab)

А если в Tab3 добавлять Tab2, то работает.

Color = 0xC2E2A7
w := 300, h := 200
Gui, -DPIScale
Gui, Color, %Color%
Gui, Add, Tab3, w%w% h%h%, основное|макросы|другое 
Gui, Tab, 1
Gui, Add, Text, HWNDhTab1 x10 y10 w%w% h%h%, % ""
Gui, Tab, 2
Gui, Add, Text, HWNDhTab2 x10 y10 w%w% h%h%, % ""
Gui, Tab, 3
Gui, Add, Text, , другое

Gui, Tab1:Default
Gui, Color, %Color%
Gui, +Parent%hTab1% -Caption -DPIScale
Gui, Add, Tab2, x0 y0 w%w% h%h%, основное 1|основное 2
Gui, Tab, 1
Gui, Add, Edit, , основное 1
Gui, Tab, 2
Gui, Add, Text, , основное 2
Gui, Show, Na x1 y25

Gui, Tab2:Default
Gui, Color, %Color%
Gui, +Parent%hTab2% -Caption -DPIScale
Gui, Add, Tab2, x0 y0 w%w% h%h%, макросы 1|макросы 2|макросы 3
Gui, Tab, 1
Gui, Add, Text, , макросы 1 
Gui, Tab, 2
Gui, Add, Edit, , макросы 2 
Gui, Tab, 3
Gui, Add, Button, , макросы 3
Gui, Show, Na x1 y25

Gui, 1:Default
Gui, Show 
Return 
По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.01 (Unicode 32-bit).

12

Re: AHK: Несколько подвкладок в главной вкладке (GUI tab)

Я уже сделал все по примеру yupppu. Пришлось немножко попотеть чтобы присвоить всем текстовым контролам переменные и все их в hide занести, но оно того стоило - все просто идеально. Ещё раз спасибо!

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

13

Re: AHK: Несколько подвкладок в главной вкладке (GUI tab)

Можно сделать наоборот, чтобы скрывать ЭУ не по одному, а "оптом".

Gui, Add, Button, w100 x10  y10 gTAB1, Вкладка1
Gui, Add, Button, w100 x120 y10 gTAB2, Вкладка2

Gui, Add, Tab, x10 y50 w600 h600 vTAB1, Подвкладка 1-1|Подвкладка 1-2
Gui, Tab, 1, 1
Gui, Add, Text, , 1111111
Gui, Tab, 2, 1
Gui, Add, Text, , 2222222

Gui, Add, Tab, x10 y50 w600 h600 vTAB2, Подвкладка 2-1|Подвкладка 2-2
Gui, Tab, 1,2
Gui, Add, Edit, , 3333333
Gui, Tab, 2,2
Gui, Add, Edit, , 4444444

GUIcontrol, Hide, TAB2

GUI, Show
Return



TAB1:
GUIcontrol, Hide, TAB2
GUIcontrol, Show, TAB1
Return

TAB2:
GUIcontrol, Hide, TAB1
GUIcontrol, Show, TAB2
Return

Кроме того, можно прикрутить ЭУ типа "флажок" или "радио-точка", чтобы было видно, в которой вкладке происходит работа.

14 (изменено: teadrinker, 2017-05-08 23:24:13)

Re: AHK: Несколько подвкладок в главной вкладке (GUI tab)

Тоже ради интереса сделал, всё работает с Tab3:

Gui, Main: Default
Gui, Margin, 0, 0
Gui, Add, Tab3, vMainTab w400 h300 gMainTab AltSubmit, Вкладка 1|Вкладка 2|Вкладка 3
Gui, Tab, 1
Gui, Add, Text, hwndhStatic hidden
hParent := DllCall("GetParent", Ptr, hStatic, Ptr)
WinGetPos,,, W, H, ahk_id %hParent%

Colors := ["Red", "Lime", "Blue"]
Loop 3  {
   Gui, Tab%A_Index%: Default
   Gui, +Parent%hParent% -Caption +ToolWindow
   Gui, Add, Tab3, % "x" 5 " y" 5 " w" W - 20 " h" H - 20, Вкладка %A_Index%-1|Вкладка %A_Index%-2|Вкладка %A_Index%-3
   Gui, Tab, 1
   Gui, Add, Edit, w200 h100, Edit %A_Index%-1
   Gui, Tab, 2
   Gui, Add, Button, gOnClick w100, Кнопка %A_Index%-2
   Gui, Tab, 3
   Gui, Add, Progress, % "w200 h20 c" Colors[A_Index], % Round(100 * A_Index/3)
   Gui, Show, % "Hide x5 y5 w" W - 10 " h" H - 10
}
Gui, Tab1:Show, NA

Gui,Main: Show, w400 h300
Return

OnClick:
   MsgBox, % A_GuiControl
   Return
   
MainTab:
   Gui, Tab%MainTab%:Show, Hide
   GuiControlGet, MainTab, Main:
   Gui, Tab%MainTab%:Show, NA
   Return
   
MainGuiClose:
   ExitApp
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

15

Re: AHK: Несколько подвкладок в главной вкладке (GUI tab)

teadrinker
С GetParent интересный ход, но можно ли  tab сделать дочерним именно вкладке, наподобии как у меня в 11 посте, чтобы не скрывать \ показывать окна при переключении вкладок.

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.01 (Unicode 32-bit).

16 (изменено: teadrinker, 2017-05-09 12:50:54)

Re: AHK: Несколько подвкладок в главной вкладке (GUI tab)

Не-а, насколько я понял, у вкладок нет отдельных окон, это просто синтаксис AHK такой, что появление/скрытие контролов, добавленных после Gui, tab, [номер вкладки] программируется автоматически.

У тебя в последнем примере родительские окна — элементы «Static», они по идее не предназначены для этой роли (хотя я о каких-то ограничениях нигде на читал), я бы опасался каких-нибудь проблем — у тебя же с tab3 почему-то нестабильно работало. В моём варианте дочерние окна добавляются именно к тому элементу, к которому их добавляет AHK.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

17 (изменено: serzh82saratov, 2017-05-15 19:17:58)

Re: AHK: Несколько подвкладок в главной вкладке (GUI tab)

Не только Static, с остальными тоже самое, также если и tab является родительским как в 7 посте.

teadrinker пишет:

В моём варианте дочерние окна добавляются именно к тому элементу, к которому их добавляет AHK

Да, принцип понятен, не заметил сразу что там есть ещё контрол #32770, причём он создаётся только если в таб добавлен хотя бы один контрол.

АПД:

#32770, причём он создаётся только если в таб добавлен хотя бы один контрол.

Как оказалось, это про tab2.

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.01 (Unicode 32-bit).

18

Re: AHK: Несколько подвкладок в главной вкладке (GUI tab)

Возможно, что можно обойтись без создания контрола в Tab3:


Gui, Add, Tab3, hwndhTab, 1
Gui, Tab, 1
Gui, Add, Text, hwndhStatic hidden
hParentStatic := DllCall("GetParent", Ptr, hStatic, Ptr)
hGW_HWNDNEXT := DllCall("GetWindow", "Ptr", hTab, "Uint", 2)   ; можно и GW_HWNDLAST = 1
MsgBox % hParentStatic "`n" hGW_HWNDNEXT "`n" (hParentStatic = hGW_HWNDNEXT)

Ещё вопрос, если с GetWindow работает, то почему?


Gui, Add, Tab3, hwndhTab, 1
hGW_HWNDNEXT := DllCall("GetWindow", "Ptr", hTab, "Uint", 2)   ; можно и GW_HWNDLAST = 1
MsgBox % hGW_HWNDNEXT

Из описания не понял.

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.01 (Unicode 32-bit).

19

Re: AHK: Несколько подвкладок в главной вкладке (GUI tab)

serzh82saratov пишет:

Возможно, что можно обойтись без создания контрола в Tab3

Да, у меня получилось, попробовал:

Gui, Main: Default
Gui, Margin, 0, 0
Gui, Add, Tab3, hwndhTab vMainTab w400 h300 gMainTab AltSubmit, Вкладка 1|Вкладка 2|Вкладка 3
hParent := DllCall("GetWindow", "Ptr", hTab, "Uint", 2)
WinGetPos,,, W, H, ahk_id %hParent%

Colors := ["Red", "Lime", "Blue"]
Loop 3  {
   Gui, Tab%A_Index%: Default
   Gui, +Parent%hParent% -Caption +ToolWindow
   Gui, Add, Tab3, % "x" 5 " y" 5 " w" W - 20 " h" H - 20, Вкладка %A_Index%-1|Вкладка %A_Index%-2|Вкладка %A_Index%-3
   Gui, Tab, 1
   Gui, Add, Edit, w200 h100, Edit %A_Index%-1
   Gui, Tab, 2
   Gui, Add, Button, gOnClick w100, Кнопка %A_Index%-2
   Gui, Tab, 3
   Gui, Add, Progress, % "w200 h20 c" Colors[A_Index], % 100 * A_Index/3
   Gui, Show, % "Hide x5 y5 w" W - 10 " h" H - 10
}
Gui, Tab1:Show, NA

Gui,Main: Show, w400 h300
Return

OnClick:
   MsgBox, % A_GuiControl
   Return
   
MainTab:
   Gui, Tab%MainTab%:Show, Hide
   GuiControlGet, MainTab, Main:
   Gui, Tab%MainTab%:Show, NA
   Return
   
MainGuiClose:
   ExitApp
serzh82saratov пишет:

#32770, причём он создаётся только если в таб добавлен хотя бы один контрол.

Тоже так показалось.

serzh82saratov пишет:

Ещё вопрос, если с GetWindow работает, то почему?

Не понял, что именно почему.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

20 (изменено: serzh82saratov, 2017-05-15 20:37:57)

Re: AHK: Несколько подвкладок в главной вкладке (GUI tab)

teadrinker пишет:

Тоже так показалось.

Я там выше добавил, это про tab2. В tab3 он есть безусловно.

teadrinker пишет:

Не понял, что именно почему.

Из описания GetWindow я не понял, почему она возвращает в данном случае - "то что требуется".

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.01 (Unicode 32-bit).

21

Re: AHK: Несколько подвкладок в главной вкладке (GUI tab)

Тут путаница вышла. При добавлении Tab3 добавляется также контрол #32770. Я думал, что он добавляется только когда к Tab3 добавлен ещё какой-то контрол. Но эта идея была изначально неверной, т. к. добавленные к Tab3 контролы не являются дочерними для таба (и для отдельных вкладок). Так что контрол #32770 добавляется в любом случае.


Gui, Add, Tab3, hwndhTab, 1
hGW_HWNDNEXT := DllCall("GetWindow", "Ptr", hTab, "Uint", 2)   ; можно и GW_HWNDLAST = 1
MsgBox % hGW_HWNDNEXT
WinGetClass, winClass, ahk_id %hGW_HWNDNEXT%
MsgBox, % winClass
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

22

Re: AHK: Несколько подвкладок в главной вкладке (GUI tab)

teadrinker пишет:

т. к. добавленные к Tab3 контролы не являются дочерними для таба (и для отдельных вкладок).

То есть добавленные контролы как бы не имеют родственной связи с табом, а только с #32770?

teadrinker пишет:

hParent := DllCall("GetWindow", "Ptr", hTab, "Uint", 2)

Название переменных не всегда уместно обсуждать, но может "hChild", или нет?

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.01 (Unicode 32-bit).

23

Re: AHK: Несколько подвкладок в главной вкладке (GUI tab)

serzh82saratov пишет:

Название переменных не всегда уместно обсуждать, но может "hChild", или нет?

hParent в том смысле, что оно будет родительским для добавленных позже контролов.

serzh82saratov пишет:

То есть добавленные контролы как бы не имеют родственной связи с табом, а только с #32770?

Ну да, они для него дочерние, а он является дочерним для Gui, и sibling'ом для таба:

Gui, +hwndhGui
Gui, Add, Tab3, hwndhTab, 1
hGW_HWNDNEXT := DllCall("GetWindow", "Ptr", hTab, "Uint", 2)
WinGetClass, winClass, ahk_id %hGW_HWNDNEXT%
MsgBox, % winClass
hParent := DllCall("GetParent", Ptr, hGW_HWNDNEXT)  ; получаем родительское для #32770
MsgBox, % "Хэндл родительского для #32770 = " . Format("{:#x}", hParent) . "`nhTab = " hTab "`nhGui = " hGui
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg