1

Тема: AHK: Показ/скрытие элемента GUI

В следующем коде реализовано скрытие и отображение элементов в GUI, в зависимости от выбора других элементов. А именно: если выбран пункт JPG из выпадающего списка - отображается Text и Edit, а если выбран пункт PDF - отображается Checkbox. Вопрос вызывает поведение, когда при наведении курсора мыши поверх чекбокса - высвечивается элемент Edit. ПРобовал переставлять строки, но не срабатывает. Как это исправить?

Gui:
   Gui, Font, S14 c2C2C2C, Arial
   Gui, Add, Text,     x158 y33 h28 w60 vcb3, DPI:
   Gui, Add, ComboBox, x30 y31 w100 vExtTo gCB_Change, JPG||PDF

   Gui, Font, S14 cA7120D, Arial
   Gui, Add, Edit,     x208 y31 h25 w60 vcb2, 300

   Gui, Font, S12 cA7120D, Arial
   Gui, Add, Checkbox, x152 y27 h36 w130 Hidden vcb1, В один файл
   Gui, Show, h176 w292, pdf2img
Return

CB_Change:
Gui Submit, NoHide
GuiControl % ExtTo = "PDF" ? "Show" : "Hide", cb1
GuiControl % ddDPI = "JPG" ? "Hide" : "Show", cb2
GuiControl % TText = "JPG" ? "Hide" : "Show", cb3
Return

2

Re: AHK: Показ/скрытие элемента GUI

1srafel пишет:
GuiControl % ddDPI = "JPG" ? "Hide" : "Show", cb2

А откуда взялось ddDPI и что это такое? То же самое с TText.

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

3

Re: AHK: Показ/скрытие элемента GUI

Мне в таком формате на англоязычном форуме посоветовали. Без них работает, спасибо!

4

Re: AHK: Показ/скрытие элемента GUI

Ошибся - в этом случае не переключает вид при повторном выборе пункта JPG.

5

Re: AHK: Показ/скрытие элемента GUI

Приведите текущий код.

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

6

Re: AHK: Показ/скрытие элемента GUI

Без "ExtTo = " и т.д. -

Gui:
   Gui, Font, S14 c2C2C2C, Arial
   Gui, Add, Text,     x158 y33 h28 w60 vcb3, DPI:
   Gui, Add, ComboBox, x30 y31 w100 vExtTo gCB_Change, JPG||PDF

   Gui, Font, S14 cA7120D, Arial
   Gui, Add, Edit,     x208 y31 h25 w60 vcb2, 300

   Gui, Font, S12 cA7120D, Arial
   Gui, Add, Checkbox, x152 y27 h36 w130 Hidden vcb1, В один файл
   Gui, Show, h176 w292, pdf2img
Return

CB_Change:
Gui Submit, NoHide
GuiControl % "PDF" ? "Show" : "Hide", cb1
GuiControl % "JPG" ? "Hide" : "Show", cb2
GuiControl % "JPG" ? "Hide" : "Show", cb3
Return

7

Re: AHK: Показ/скрытие элемента GUI

1srafel пишет:
GuiControl % "PDF" ? "Show" : "Hide", cb1

А что делает эта строчка?

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

8

Re: AHK: Показ/скрытие элемента GUI

При выборе "PDF" переключает между "Show" и "Hide".

9

Re: AHK: Показ/скрытие элемента GUI

Не совсем понял. Как это работает? Что вот эта часть означает:

"PDF" ? "Show" : "Hide"

?

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

10

Re: AHK: Показ/скрытие элемента GUI

Видимо, условие: если выбрано "PDF" - переключать между "Show" и "Hide".

11

Re: AHK: Показ/скрытие элемента GUI

А ниже я вписал наоборот:

"JPG" ? "Hide" : "Show"

Так как при первом показе Gui это должно отображаться.

12

Re: AHK: Показ/скрытие элемента GUI

1srafel пишет:

если выбрано "PDF" - переключать между "Show" и "Hide".

А как эта часть кода узнаёт, что что-то было выбрано, с помощью магии?
Смотрите:

MsgBox % "PDF" ? "Show" : "Hide"

Что сообщение показывает? А мы разве что-то где-то выбирали?

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

13

Re: AHK: Показ/скрытие элемента GUI

Узнаёт через отсылку "cb1" и т.п. Но вообще говоря, смотреть надо первый код. Второй, как я писал - не корректно работает.

14

Re: AHK: Показ/скрытие элемента GUI

1srafel пишет:

Узнаёт через отсылку "cb1" и т.п.

Каким образом узнаёт, что за отсылка такая, где это описано? Вы мой пример запускали? Что сообщение показывает?
У нас тут есть два варианта: либо вам интересно программирование, вы пытаетесь разобраться в коде сами, и задаёте правильные вопросы, либо вам нужен просто готовый вариант, тогда добро пожаловать в Коммерческий раздел.
Если у вас первый случай, читайте про связанную с контролом переменную, зачем она нужна, как получить в неё текущее значение. А также что такое тернарный оператор, как он работает и для чего нужен.

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

15

Re: AHK: Показ/скрытие элемента GUI

Имелись в виду значения в конце строк:

GuiControl % ExtTo = "PDF" ? "Show" : "Hide", cb1
GuiControl % ddDPI = "JPG" ? "Hide" : "Show", cb2
GuiControl % TText = "JPG" ? "Hide" : "Show", cb3

А так же ExtTo/ddDPI/TText - с которыми связаны команды из GUI. Как я понимаю, первый код как раз работает, все делает как надо - кроме того что всплывает нижний контрол при наведении мыши.

16

Re: AHK: Показ/скрытие элемента GUI

Ваш код показывает "Show". Но так понимаю, что так и должно быть - скрипт показывает первое значение, так как никаких условий у него нет. А в первом коде условие задается выбором из Gui.

17

Re: AHK: Показ/скрытие элемента GUI

1srafel пишет:

в первом коде условие задается выбором из Gui

В первом коде условие задается сравнением переменной ExtTo с определённым значением.
Разве одно и то же

ExtTo = "PDF" ? "Show" : "Hide"

и

"PDF" ? "Show" : "Hide"

?
А откуда взялись ddDPI и TText я так и не понял. А вы?
Прочитали про тернарный оператор?

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

18

Re: AHK: Показ/скрытие элемента GUI

Так о том и речь, что второй код я привел как пример неработающего варианта с неудачной правкой. То есть, "текущим кодом", о котором вы сказали выше - надо считать первый код. А второй - заведомо неточно работает.

ddDPI и ExtTo взялись по аналогии из первого кода, и нужны они для того чтобы в них содержалась инфа из Edit и ComboBox. То есть, они должны использоваться далее по коду, который здесь опущен.

19

Re: AHK: Показ/скрытие элемента GUI

1srafel пишет:

ddDPI и ExtTo взялись по аналогии из первого кода, и нужны они для того чтобы в них содержалась инфа из Edit и ComboBox.

Нет, не по аналогии.

teadrinker пишет:

читайте про связанную с контролом переменную, зачем она нужна, как получить в неё текущее значение

Прочитали? Похоже, что нет. ExtTo — это переменная, связанная с контролом ComboBox. А ddDPI и TText взяты из воздуха.
Да и зачем приводить части кода, который отсутствует и заведомо не будет работать?
Просто разберитесь, как работает данный механизм:

CB_Change:
Gui Submit, NoHide
GuiControl % ExtTo = "PDF" ? "Show" : "Hide", cb1

Тогда вопросы должны исчезнуть сами собой.

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

20

Re: AHK: Показ/скрытие элемента GUI

Можно конечно удалить строки, из которых для основного кода нужны только переменные:

GuiControl % ddDPI = "JPG" ? "Hide" : "Show", cb2
GuiControl % TText = "JPG" ? "Hide" : "Show", cb3

Но без них все равно при наведении курсора Edit будет перекрывать Checkbox. Спасибо, поразбираюсь.

21

Re: AHK: Показ/скрытие элемента GUI

1srafel пишет:

Но без них все равно

Программирование — это не магия, тут не заклинания, а логично устроенные команды. Не надо ничего удалять или добавлять, не понимая, что делаете.

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

22

Re: AHK: Показ/скрытие элемента GUI

Спасибо, так заработало:


GuiControl, % ExtTo = "PDF" ? "Show" : "Hide", cb1
GuiControl, % ExtTo = "PDF" ? "Hide" : "Show", cb2
GuiControl, % ExtTo = "PDF" ? "Hide" : "Show", cb3

23

Re: AHK: Показ/скрытие элемента GUI

Рад, что разобрались.

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

24 (изменено: 1srafel, 2024-02-13 11:18:56)

Re: AHK: Показ/скрытие элемента GUI

Но тут новая загвоздка: не пойму, почему переменная "Btn3" попадает в msgbox, но в цикле уже не действует:

Gui:
   Gui, Add, Text,     x158 y33 h28 w60 vBtn3, DPI:
   Gui, Add, ComboBox, x30 y31 w100 vExtTo gBtn_Change, JPG||PDF
   Gui, Add, Edit,     x208 y31 h25 w60 vBtn2, 300
   Gui, Add, Checkbox, x152 y27 h36 w130 Hidden vBtn1, В один файл
   Gui, Add, Button, x98 y125 h36 w105 default, OK

   Gui, Show, h176 w292, pdf2img
Return

Btn_Change:
Gui Submit, NoHide
GuiControl, % ExtTo = "PDF" ? "Show" : "Hide", Btn1
GuiControl, % ExtTo = "PDF" ? "Hide" : "Show", Btn2
GuiControl, % ExtTo = "PDF" ? "Hide" : "Show", Btn3
Return

ButtonOK:
Gui, Submit
global Btn3
msgbox %Btn1%`n%Btn2%`n%Btn3%
msgbox %Btn3%

Loop, 20 {
   msgbox ---------%Btn3%
}
Return

GuiClose:
GuiEscape:
   Gui, Destroy
   ToolTip
Return

25

Re: AHK: Показ/скрытие элемента GUI

1srafel пишет:

почему переменная "Btn3" попадает в msgbox

Что вы имеете в виду?

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

26

Re: AHK: Показ/скрытие элемента GUI

Извиняюсь - отредактировал код (добавив "msgbox %Btn1%`n%Btn2%`n%Btn3%"). Суть в том, что если после запуска нажать ОК - выйдет окно со значениями двух переменных. Но ниже эти переменные каким то образом очищаются и перестают отображаться, даже если вот так прописать:

msgbox %Btn1%`n%Btn2%`n%Btn3%
msgbox %Btn3%

27

Re: AHK: Показ/скрытие элемента GUI

Разве это не магия)?

28

Re: AHK: Показ/скрытие элемента GUI

Я не понял, что и где очищается и перестаёт отображаться. Напишите код целиком.

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

29 (изменено: 1srafel, 2024-02-13 11:21:39)

Re: AHK: Показ/скрытие элемента GUI

Это код из сообщения №24. Там переменная попадает в msgbox, а потом следующей строкой идет второй msgbox - в котором эта переменная уже обнулилась.

30

Re: AHK: Показ/скрытие элемента GUI

Ошибся. Я думал что нужная мне переменная - это Btn3, а это оказалась Btn2. Извиняюсь!

31

Re: AHK: Показ/скрытие элемента GUI

Если вы про переменную Btn3, то её значения не было и в первом MsgBox.

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

32

Re: AHK: Показ/скрытие элемента GUI

Я ошибочно принял за нужную мне переменную - переменную из этой строки:

Gui, Add, Text,     x158 y33 h28 w60 vBtn3, DPI:

Хотя нужная находилась в строке с Edit.