Как менять размеры вкладок в GUI? Topic is solved

Помощь в написании скриптов
marusa122
Posts: 135
Joined: 22 Mar 2023, 07:48

Как менять размеры вкладок в GUI?

Post by marusa122 » 29 Oct 2023, 02:34

Здравствуйте.
Есть скрипт:

Code: Select all

Gui, Add, Tab2, vTabvar, Главная|Дополнительная
Gui, Show

Gui,Tab, Главная
Gui,Add,Text,,Строка 1 для вкладки Главная
Gui,Add,Text,,Строка 2 для вкладки Главная
Gui,Add,Text,,Строка 3 для вкладки Главная
Gui,Add,Text,,Строка 4 для вкладки Главная
Gui,Add,Text,,Строка 5 для вкладки Главная

Gui,Tab, Дополнительная
Gui,Add,Text,,Строка 1 для вкладки Дополнительная
Gui,Add,Text,,Строка 2 для вкладки Дополнительная
Gui,Add,Text,,Строка 3 для вкладки Дополнительная

Esc::
Guicontrol, Move, Tabvar, W200 H200
Gui, Show, W100 H100
Return

Tab::
Guicontrol, Move, Tabvar, W300 H300
Gui, Show, W200 H200
Return
Как сделать так, чтобы команда, выполняемая при нажатии Esc, автоматически выполнялась при переходе на вкладку "Дополнительная"? А команда, выполняемая при нажатии Tab, автоматически выполнялась при переходе на вкладку "Главная"?

vmech
Posts: 361
Joined: 25 Aug 2019, 13:03

Re: Как менять размеры вкладок в GUI?

Post by vmech » 29 Oct 2023, 06:41

Попробовать использовать Tab3 вместо Tab/Tab2 ?
https://www.autohotkey.com/docs/v1/lib/GuiControls.htm#Tab_vs
Автоматический размер: если скрипт не задан, ширина и/или высота элемента управления Tab3 автоматически вычисляются в одно из следующих значений (в зависимости от того, что наступит раньше после создания элемента управления).:

* В первый раз элемент управления Tab3 перестает быть текущим элементом управления tab. Это может произойти в результате вызова Gui Tab (с параметрами или без них) или создания другого элемента управления tab.
* Первый раз Gui Show вызывается для этого конкретного Gui.

Рассчитанный размер учитывает вспомогательные элементы управления, которые существуют при автоматическом изменении размера, плюс поля по умолчанию. Размер вычисляется только один раз и не будет пересчитан повторно, даже если элементы управления будут добавлены позже. Если элемент управления Tab3 пуст, он получает тот же размер по умолчанию, что и элемент управления Tab или Tab2.

Элементы управления Tab и Tab2 не изменяются автоматически; они получают произвольный размер по умолчанию.
Please post your script code inside [code] ... [/code] block. Thank you.

marusa122
Posts: 135
Joined: 22 Mar 2023, 07:48

Re: Как менять размеры вкладок в GUI?

Post by marusa122 » 29 Oct 2023, 07:28

@vmech
vmech wrote:
29 Oct 2023, 06:41
Попробовать использовать Tab3 вместо Tab/Tab2 ?
Я попробовала использовать Tab3:

Code: Select all

Gui, Add, Tab3, vTabvar, Главная|Дополнительная

Gui,Tab, Главная
Gui,Add,Text,,Строка 1 для вкладки Главная
Gui,Add,Text,,Строка 2 для вкладки Главная
Gui,Add,Text,,Строка 3 для вкладки Главная
Gui,Add,Text,,Строка 4 для вкладки Главная
Gui,Add,Text,,Строка 5 для вкладки Главная

Gui,Tab, Дополнительная
Gui,Add,Text,,Строка 1 для вкладки Дополнительная
Gui,Add,Text,,Строка 2 для вкладки Дополнительная
Gui,Add,Text,,Строка 3 для вкладки Дополнительная

Gui, Show

Return
Высота вкладки Дополнительная должна быть меньше высоты вкладки Главная. Но она остается такой же, из-за чего половина вкладки Дополнительная остается пустой. А нужно, чтобы ее высота уменьшалась по размеру содержимого.

vmech
Posts: 361
Joined: 25 Aug 2019, 13:03

Re: Как менять размеры вкладок в GUI?  Topic is solved

Post by vmech » 29 Oct 2023, 10:05

Вобщем не знаю зачем тебе это нужно... Но, похоже ты хотела вот это:

Code: Select all

#Requires Autohotkey v1.1

Gui, Add, Tab2, vTabvar gTabSub, Главная|Дополнительная

Gui,Tab, Главная
Gui,Add,Text,,Строка 1 для вкладки Главная
Gui,Add,Text,,Строка 2 для вкладки Главная
Gui,Add,Text,,Строка 3 для вкладки Главная
Gui,Add,Text,,Строка 4 для вкладки Главная
Gui,Add,Text,,Строка 5 для вкладки Главная

Gui,Tab, Дополнительная
Gui,Add,Text,,Строка 1 для вкладки Дополнительная
Gui,Add,Text,,Строка 2 для вкладки Дополнительная
Gui,Add,Text,,Строка 3 для вкладки Дополнительная

Gui, Show

TabSub:
Gui,Submit,NoHide
Switch Tabvar
{
Case "Главная":Guicontrol, Move, Tabvar, W200 H180
Case "Дополнительная":Guicontrol, Move, Tabvar, W250 H120
}
Return

GuiClose:
ExitApp
Добавил к инициализации элемента вкладок метку подпрограммы gTabSub. Она будет вызываться при каждом клике по вкладкам.
ВАЖНО: Почему то, при запуске скрипта, без всяких кликов, эта подпрограмма вызывает сама себя 1 раз - поэтому элемент с вкладками сразу отображается в изменённом размере. Не знаю как от этого избавиться. М.б. кто другой, более сведущий в этих вопросах, подскажет.

ЗЫ. Уже совсем забыл как пишется код в Autohotkey v1 - это издевательство над рассудком какое то... @marusa122, почему ты не начинаешь изучать, и использовать, Autohotkey v2 ?
Please post your script code inside [code] ... [/code] block. Thank you.

marusa122
Posts: 135
Joined: 22 Mar 2023, 07:48

Re: Как менять размеры вкладок в GUI?

Post by marusa122 » 29 Oct 2023, 10:30

@vmech, спасибо, это оно!
А насчет Autohotkey v2... по нему нет русскоязычной справки, да и как человеку, который абсолютно в этом не шарит, v1.1 мне кажется проще и логичнее.

vmech
Posts: 361
Joined: 25 Aug 2019, 13:03

Re: Как менять размеры вкладок в GUI?

Post by vmech » 29 Oct 2023, 12:37

@marusa122, там ещё есть такая тема: если добавить опцию AltSubmit в команду Gui, Add, Tab2, vTabvar gTabSub AltSubmit, Главная|Дополнительная, тогда в переменную Tabvar будут передаваться числовые значения, соответствующие порядковым номерам вкладок, слева направо. Соответственно, в условных операторах Case нужно будет проставить цифры, без кавычек, вместо строковых значений, чтобы всё работало.

Вероятны случаи, когда работа с цифровой нумерацией будет более востребована и удобна, чем работа со строковыми значениями, которые в любой момент можно изменить, и, соответственно, в таком случае возникнет необходимость синхронизировать их значения и в операторах Case, чтобы условия срабатывали правильно.

Просто имей это ввиду, и «запиши себе на корочку» ;)
Please post your script code inside [code] ... [/code] block. Thank you.

vmech
Posts: 361
Joined: 25 Aug 2019, 13:03

Re: Как менять размеры вкладок в GUI?

Post by vmech » 29 Oct 2023, 13:29

@marusa122, я обнаружил способ, как избавиться от изменения размера элемента вкладок при запуске скрипта. Если интересно - напиши, поясню механику (там ничего сложного, просто как обычно «дьявол скрывается в мелочах» :lol: ).
Please post your script code inside [code] ... [/code] block. Thank you.

marusa122
Posts: 135
Joined: 22 Mar 2023, 07:48

Re: Как менять размеры вкладок в GUI?

Post by marusa122 » 29 Oct 2023, 14:49

@vmech, жги! Мне уже интересно))

vmech
Posts: 361
Joined: 25 Aug 2019, 13:03

Re: Как менять размеры вкладок в GUI?

Post by vmech » 29 Oct 2023, 15:16

Ну в общем есть 2 внутренних переменных: A_GuiControl и A_GuiControlEvent.
В первой отпечатывается значение, каким либо образом связанное с элементом Gui, с которым взаимодействует пользователь.
Во второй отпечатывается тип действия (обычно - из статичного списка), которое было произведено над этим элементом при взаимодействии.
Ну и, собссно, после старта скрипта, и до первого клика куда бы то ни было, они - пустые (т.е. им не присвоено вообще никаких значений).
Ну вот если использовать проверку на значение даже хотя бы второй переменной (элемент то нам известен - собственно запускается подпрограмма, привязанная именно к этому элементу), тогда это и будет простейший фильтр:

Code: Select all

If (A_GuiControlEvent)
{
	Switch Tabvar
	{
	Case 1:Guicontrol, Move, Tabvar, W200 H180
	Case 2:Guicontrol, Move, Tabvar, W250 H120
	; Case "Главная":Guicontrol, Move, Tabvar, W200 H180
	; Case "Дополнительная":Guicontrol, Move, Tabvar, W250 H120
	}
}
Пока переменной не присвоено значение, условие в If будет ложным, и блок Switch будет просто пропущен.
Условие станет истинным после первого (и каждого последующего) клика по вкладкам, и тогда блок Switch будет выполнять свою функцию.
Вот и все «премудрости» :)
Please post your script code inside [code] ... [/code] block. Thank you.

Post Reply

Return to “Помощь”